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

我想创建一个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()); } } 

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

    

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

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

 element.setTextContent("\u00A0"); 

解决方案非常有趣:

 Node disableEscaping = document.createProcessingInstruction(StreamResult.PI_DISABLE_OUTPUT_ESCAPING, "&"); Element element = document.createElement("element"); element.setTextContent(" "); document.appendChild(disableEscaping ); document.appendChild(element); Node enableEscaping = document.createProcessingInstruction(StreamResult.PI_ENABLE_OUTPUT_ESCAPING, "&"); document.appendChild(enableEscaping ) 

所以基本上你需要把你的代码放在转义元素之间。

尝试使用

 element.appendChild (document.createCDATASection (" ")); 

代替

 element.setTextContent(...); 

你会在你的xml中得到这个:如果我理解你正在尝试做什么,它可能会有效。

作为四十二个答案的插件:

如果像我一样,你在非修补的 Eclipse IDE中尝试代码,你可能会看到一些奇怪的A出现而不是不间断的空间。 这是因为Eclipse中的控制台编码与Unicode(UTF-8)不匹配。

-Dfile.encoding=UTF-8添加到eclipse.ini应该可以解决这个问题。

干杯,Wim