考虑:
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());
问题似乎出在变压器上。
慕虎7371278
相关分类