我的XML文件仅包含一个元素
<Message>
<Location URI ="XXX:XXX:XXX" />
</Message>
我想使用Java读取和打印相同的XML,但是在打印后,它在/>之前会丢失空白
<Message>
<Location URI ="XXX:XXX:XXX"/>
</Message>
我尝试了DocumentBuilderFactory和Transformer的不同配置,但结果是相同的。
有什么想法吗?
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document requestDocument = builder.parse(this.getClass().getResourceAsStream("/message-template.xml"));
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
DOMSource domSource = new DOMSource(requestDocument);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(domSource, result);
System.out.println(writer.toString());
答案 0 :(得分:1)
这里:
DOMSource domSource = new DOMSource(requestDocument);
...
transformer.transform(domSource, result);
您将DOMSource
转换为StreamResult
。 DOMSource
不是XML文件的文本表示,而是文档对象模型(DOM)树。
因此,与树的内容无关的空白不会保留在DOMSource
中:
URI ="XXX:XXX:XXX" />
|-------> not preserved
大多数表示和处理XML的API都是以这种方式工作的。
如果您需要在结果中保留不大的空格,则可能应该自己解析XML文件。