如何在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