使用標準 javax.xml.parsers (DOM) 解析 XML,建立新元素節點並插入指定位置,最後用 Transformer 寫回檔案。
<?xml version="1.0" encoding="UTF-8"?>
<書架>
<書>
<書名>Thinking in Java</書名>
<作者>Eric</作者>
<售價>$34</售價>
</書>
</書架>
public void addElement2() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("src/Day01/Book.xml"));
Element newEle = doc.createElement("作者");
newEle.setTextContent("ZC"); // <作者>ZC作者>
// 取得目標節點 <書名>
Node target = doc.getElementsByTagName("書名").item(0);
// 在 <書名> 之前插入新元素 (成為同層前一個兄弟節點)
target.getParentNode().insertBefore(newEle, target);
// 寫回檔案
TransformerFactory tf = TransformerFactory.newInstance();
Transformer tr = tf.newTransformer();
tr.transform(new DOMSource(doc), new StreamResult(new FileOutputStream("src/Day01/Book.xml")));
}
<?xml version="1.0" encoding="UTF-8"?>
<書架>
<書>
<作者>ZC</作者> <!-- 新增 -->
<書名>Thinking in Java</書名>
<作者>Eric</作者>
<售價>$34</售價>
</書>
</書架>
Node.insertBefore(newNode, refNode):在 refNode 之前插入;若 refNode 為 null 則等同 appendChild。DOMSource (來源 DOM 樹) 與 StreamResult (輸出流)。