亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

禁用 XML 中的自動 & 轉義?

禁用 XML 中的自動 & 轉義?

達令說 2023-12-30 16:05:57
考慮:DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.newDocument();Element root = doc.createElement("list");doc.appendChild(root);for(CorrectionEntry correction : dictionary){    Element elem = doc.createElement("elem");    elem.setAttribute("from", correction.getEscapedFrom());    elem.setAttribute("to", correction.getEscapedTo());    root.appendChild(elem);}(然后將文檔寫入 XML 文件)wheregetEscapedFrom并getEscapedTo返回(在我的代碼中)類似于fink&#xE9;如果原始單詞是finké. 從而對大于127的字符進行Unicode轉義。問題是最終的 XML 有以下行<elem from="finke" to="fink&amp;#xE9;" />(fromis finke,tois finké),我希望它位于<elem from="finke" to="fink&#xE9;" />我已經嘗試按照 StackOverflow 中的另一個響應來禁用 & 符號的轉義,并將該行放在doc.appendChild(doc.createProcessingInstruction(StreamResult.PI_DISABLE_OUTPUT_ESCAPING, "&"));創建之后,doc但沒有成功。我如何“告訴 XML”不要轉義 & 符號?é或者,相反,我怎樣才能讓“XML”從, 或,轉換\\u00E9為&#xE9;?更新我設法解決了這個問題:直到寫入文件為止,節點(通過調試)似乎包含正確的字符串。一旦我打電話,transformer.transform(domSource, streamResult);一切都會變得瘋狂。DOMSource domSource = new DOMSource(doc);ByteArrayOutputStream baos = new ByteArrayOutputStream();StreamResult streamResult = new StreamResult(baos);Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(domSource, streamResult);System.out.println(baos.toString());問題似乎出在變壓器上。
查看完整描述

1 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

嘗試setOutputProperty("encoding", "us-ascii")在變壓器上進行設置。這告訴序列化器僅使用 ASCII 字符生成輸出,這意味著任何非 ASCII 字符都將被轉義。但是您無法控制它是十進制還是十六進制轉義(除非您使用 Saxon-PE 或更高版本作為您的Transformer,在這種情況下有一個序列化選項來控制它)。

嘗試“手動”進行序列化從來都不是一個好主意。至少有三個原因:(a) 你會弄錯(我們看到很多這樣的問題是由人們以這種方式生成糟糕的 XML 引起的),(b) 你應該使用這些工具,而不是反對它們,(c )編寫序列化程序的人比您更了解 XML,并且他們知道對他們的期望。您可能正在處理由對 XML 的理解非常膚淺的人編寫的需求。


查看完整回答
反對 回復 2023-12-30
  • 1 回答
  • 0 關注
  • 313 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號