考慮: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é如果原始單詞是finké. 從而對大于127的字符進行Unicode轉義。問題是最終的 XML 有以下行<elem from="finke" to="fink&#xE9;" />(fromis finke,tois finké),我希望它位于<elem from="finke" to="finké" />我已經嘗試按照 StackOverflow 中的另一個響應來禁用 & 符號的轉義,并將該行放在doc.appendChild(doc.createProcessingInstruction(StreamResult.PI_DISABLE_OUTPUT_ESCAPING, "&"));創建之后,doc但沒有成功。我如何“告訴 XML”不要轉義 & 符號?é或者,相反,我怎樣才能讓“XML”從, 或,轉換\\u00E9為é?更新我設法解決了這個問題:直到寫入文件為止,節點(通過調試)似乎包含正確的字符串。一旦我打電話,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 的理解非常膚淺的人編寫的需求。
添加回答
舉報
0/150
提交
取消