pau*_*aul 7 java attributes escaping xmlserializer
我有以下DOM
<row>
<link href="Büro.txt" target="_blank">
my link
</link>
</row>
Run Code Online (Sandbox Code Playgroud)
当我使用Java XmlSerializer将它序列化为一个文件时,它出现如下:
<row>
<link href="B&#252;ro.txt" target="_blank">
my link
</link>
</row>
Run Code Online (Sandbox Code Playgroud)
有没有办法控制XmlSerializer处理属性转义的方式?我应该以任何方式做到这一点吗?
更新
我还应该说我使用的是jre 1.6.直到最近我一直在使用jre 1.5,我很确定它是'正确'序列化(即'&'未被转义)
澄清
DOM是以编程方式创建的.这是一个例子:
Document doc = createDocument();
Element root = doc.createElement("root");
doc.appendChild(root);
root.setAttribute("test1", "ê");
root.setAttribute("test2", "üöä");
root.appendChild(doc.createTextNode("ê"));
StringWriter sw = new StringWriter();
serializeDocument(doc, sw);
System.out.println(sw.toString());
Run Code Online (Sandbox Code Playgroud)
我的解决方案
我并不是真的想这样做,因为它涉及大量的代码更改和测试,但我决定将属性数据移动到CDATA元素中.问题解决避免了.
如何获取 DOM?会不会跟这个有关系?我使用 Sun Java 6 和最新的 Xerces-J (2.9.1) 尝试了使用标准 DocumentBuilder 的示例 XML(只是 b/c 我更熟悉它),顺便说一下,它弃用了 XmlSerializer,转而使用 LSSerializer 或 TrAX 。
\n\n无论如何,使用这种技术,序列化文档甚至不再包含字符引用,并转换为“B\xc3\xbcro.txt”。我使用了以下代码:
\n\nString xml = "<row>\\n"\n + " <link href=\\"Büro.txt\\" target=\\"_blank\\">\\n"\n + " my link\\n" + " </link>\\n" + " </row>";\n\nInputStream is = new ByteArrayInputStream(xml.getBytes());\nDocument doc = DocumentBuilderFactory.newInstance()\n .newDocumentBuilder().parse(is);\n\nXMLSerializer xs = new XMLSerializer();\nxs.setOutputCharStream(new PrintWriter(System.err));\n\nxs.serialize(doc);\nRun Code Online (Sandbox Code Playgroud)\n