我想创建一个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());
}
}
这是我的示例代码的输出:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<element>&#160;</element>
任何修复或避免的想法?非常感谢!
答案 0 :(得分:5)
将文本内容直接设置为您想要的字符,如有必要,序列化程序将为您转义:
element.setTextContent("\u00A0");
答案 1 :(得分:5)
解决方案非常有趣:
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 )
所以基本上你需要把你的代码放在转义元素之间。
答案 2 :(得分:0)
尝试使用
element.appendChild (document.createCDATASection (" "));
而不是
element.setTextContent(...);
你会在你的xml中得到这个: 如果我理解你正在尝试做什么,它可能会有效。
答案 3 :(得分:0)
作为对四十二个答案的补充:
如果像我一样,你在非修补的 Eclipse IDE中尝试代码,你可能会看到一些奇怪的A出现而不是不间断的空间。这是因为Eclipse中控制台的编码与Unicode(UTF-8)不匹配。
将-Dfile.encoding=UTF-8
添加到eclipse.ini应解决此问题。
干杯, 维姆