如何在Java-XML中禁用/避免Ampersand-Escaping?

ole*_*leh 7 java xml dom escaping ampersand

我想创建一个替换空格的XML  .但是Java-Transformer逃脱了Ampersand,因此输出就是 

这是我的示例代码:

public class Test {

    public static void main(String[] args) {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.newDocument();

        Element element = document.createElement("element");
        element.setTextContent(" ");
        document.appendChild(element);

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        StreamResult streamResult = new StreamResult(stream);
        transformer.transform(new DOMSource(document), streamResult);
        System.out.println(stream.toString());

    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的示例代码的输出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<element>&amp;#160;</element>
Run Code Online (Sandbox Code Playgroud)

有什么想法来修复或避免这种情况?非常感谢!

Łuk*_*zka 7

解决方案很有趣:

Node disableEscaping = document.createProcessingInstruction(StreamResult.PI_DISABLE_OUTPUT_ESCAPING, "&");
 Element element = document.createElement("element");
 element.setTextContent("&#160;");
 document.appendChild(disableEscaping );
 document.appendChild(element);
Node enableEscaping = document.createProcessingInstruction(StreamResult.PI_ENABLE_OUTPUT_ESCAPING, "&");
document.appendChild(enableEscaping )
Run Code Online (Sandbox Code Playgroud)

因此,基本上,您需要将代码放在转义元素之间。

  • 这个答案值得更多投票 (2认同)

for*_*two 5

将文本内容直接设置为您想要的字符,如有必要,序列化程序将为您转义它:

element.setTextContent("\u00A0");
Run Code Online (Sandbox Code Playgroud)