如何停止XmlSerializer转换ê 至ê 在一个属性?

pau*_*aul 7 java attributes escaping xmlserializer

我有以下DOM

    <row>
        <link href="B&#252;ro.txt" target="_blank">
            my link
        </link>
    </row>
Run Code Online (Sandbox Code Playgroud)

当我使用Java XmlSerializer将它序列化为一个文件时,它出现如下:

    <row>
        <link href="B&amp;#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", "&#234;");
        root.setAttribute("test2", "üöä");
        root.appendChild(doc.createTextNode("&#234;"));

        StringWriter sw = new StringWriter();

        serializeDocument(doc, sw);
        System.out.println(sw.toString());
Run Code Online (Sandbox Code Playgroud)

我的解决方案 我并不是真的想这样做,因为它涉及大量的代码更改和测试,但我决定将属性数据移动到CDATA元素中.问题解决避免了.

mus*_*iKk 2

如何获取 DOM?会不会跟这个有关系?我使用 Sun Java 6 和最新的 Xerces-J (2.9.1) 尝试了使用标准 DocumentBuilder 的示例 XML(只是 b/c 我更熟悉它),顺便说一下,它弃用了 XmlSerializer,转而使用 LSSerializer 或 TrAX 。

\n\n

无论如何,使用这种技术,序列化文档甚至不再包含字符引用,并转换为“B\xc3\xbcro.txt”。我使用了以下代码:

\n\n
String xml = "<row>\\n"\n    + "        <link href=\\"B&#252;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);\n
Run Code Online (Sandbox Code Playgroud)\n