【发布时间】:2018-04-10 11:13:12
【问题描述】:
我想使用 Java 在现有 XML 文件的最后一行添加一个节点。所以我遵循了下面的代码。
示例 XML 文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<mapping-configuration>
<fields-mapping>
<field compare="true" criteria="true" displayName="demo1"/>
<field compare="true" criteria="true" displayName="demo2"/>
</fields-mapping>
</mapping-configuration>
代码:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("C:/Desktop/test.xml"));
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
Node nList = doc.getDocumentElement().getChildNodes().item(0).getLastChild();
System.out.println(nList.getNodeName());
Element newserver=doc.createElement("field");
newserver.setAttribute("source", "33");
nList.appendChild(newserver).normalize();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("C:/Desktop/test.xml"));
transformer.transform(source, result);
所以,我得到了结果为
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<mapping-configuration>
<fields-mapping>
<field compare="true" criteria="true" displayName="demo1"/>
<field compare="true" criteria="true" displayName="demo2">
<field source="33"/>
</field>
</fields-mapping>
</mapping-configuration>
但我的预期输出应该是
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<mapping-configuration>
<fields-mapping>
<field compare="true" criteria="true" displayName="demo1"/>
<field compare="true" criteria="true" displayName="demo2"/>
<field source="33"/>
</fields-mapping>
</mapping-configuration>
【问题讨论】: