Java XML API在自动关闭标记之前删除空格

时间:2018-07-29 17:27:07

标签: java xml

我的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());

1 个答案:

答案 0 :(得分:1)

这里:

DOMSource domSource = new DOMSource(requestDocument);
...
transformer.transform(domSource, result);

您将DOMSource转换为StreamResultDOMSource不是XML文件的文本表示,而是文档对象模型(DOM)树。
因此,与树的内容无关的空白不会保留在DOMSource中:

URI ="XXX:XXX:XXX" />
                  |-------> not preserved

大多数表示和处理XML的API都是以这种方式工作的。
如果您需要在结果中保留不大的空格,则可能应该自己解析XML文件。