如何解决Java DOM解析器-修改后保持xml文档格式
我在Java中遇到了DOM paser的问题。
我有格式漂亮的xml文件。我通过`javax.xml.parsers.DocumentBuilder#parse(file)打开它,并在现有节点下添加一个新Node,然后将结果保存到现有文件中(这是xml所在的原始文件)。之后,我失去了一些认同感和换行符。
示例
我的原始xml如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<elem>
<key>Event</key>
<val>100</val>
</elem>
</root>
我尝试在id
下添加elem
节点。而且我希望得到类似的信息(有一个名为id
且值为MY_ID
的新节点):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<elem>
<key>Event</key>
<val>100</val>
<id>MY_ID</id>
</elem>
</root>
我的代码:
File file = new File(filepath);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(file);
document.getDocumentElement().normalize();
NodeList nodeList = document.getElementsByTagName("elem");
for (int itr = 0; itr < nodeList.getLength(); itr++) {
Node node = nodeList.item(itr);
Element element = (Element) node;
if (element.getElementsByTagName("id").getLength() == 0) {
Element idElem = document.createElement("id");
idElem.appendChild(document.createTextNode("MY_ID"));
element.appendChild(idElem);
}
}
DOMSource source = new DOMSource(document);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
StreamResult result = new StreamResult(file);
transformer.transform(source,result);
我得到的结果是:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root>
<elem>
<key>Event</key>
<val>100</val>
<id>MY_ID</id></elem>
</root>
在某些地方,文档格式丢失了(请参阅<root>
和</elem>
)。
我还尝试添加以下行:
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
但是额外的换行符会出现在文档中:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<elem>
<key>Event</key>
<val>100</val>
<id>MY_ID</id>
</elem>
</root>
那么修改文档后保持XML文档格式的正确方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。