DOM4J 是 Java 操作 XML 的優秀庫,API 簡潔易用。本文通過完整可運行示例,演示 XML 節點屬性的增、刪、改、查核心操作。
<?xml version="1.0" encoding="UTF-8"?>
<contactList id="0">
<contact id="001" class="style">
<name>張三</name>
<age>20</age>
<phone>134222223333</phone>
<email>zhangsan@qq.com</email>
<qq>432221111</qq>
</contact>
<contact id="002">
<name>李四</name>
<age>20</age>
<phone>134222225555</phone>
<email>lisi@qq.com</email>
<qq>432222222</qq>
</contact>
<contactTwo>
<name>王五</name>
<age>32</age>
<phone>465431341</phone>
<emali>af@qq.com</emali>
<qq>46164694</qq>
</contactTwo>
<test>測試</test>
<test>其他用途</test>
</contactList>
package vastsum;
import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
public class AttrDemo {
@Test
public void example() throws Exception {
// 1. 讀取 XML 獲取 Document
SAXReader reader = new SAXReader();
Document document = reader.read(new File("./src/contact.xml"));
// 2. 獲取根節點屬性
Element rootElem = document.getRootElement();
Attribute rootAttr = rootElem.attribute("id"); // id="0"
// 3. 獲取子節點屬性
Element contactElem = rootElem.element("contact");
Attribute contactAttr = contactElem.attribute("id"); // id="001"
// 4. 遍歷節點所有屬性
for (Iterator it = contactElem.attributeIterator(); it.hasNext();) {
Attribute attr = (Attribute) it.next();
System.out.println(attr.getName() + " = " + attr.getValue());
}
// 5. 新增屬性
contactElem.addAttribute("name", "zhangsan");
// 6. 修改屬性值
Attribute nameAttr = contactElem.attribute("name");
nameAttr.setValue("lisi");
// 7. 刪除屬性
contactElem.remove(nameAttr);
// 8. 寫回文件
XMLWriter writer = new XMLWriter(new FileWriter("./src/contact.xml"));
writer.write(document);
writer.close();
// 9. 中文編碼處理(如需要)
/*
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(new FileWriter("./src/contact.xml"), format);
*/
// 10. 獲取屬性名與值
System.out.println(rootAttr.getName()); // id
System.out.println(contactAttr.getName()); // id
System.out.println(contactAttr.getValue()); // 001
System.out.println(rootAttr.getValue()); // 0
}
}
| 操作 | 方法 | 說明 |
|---|---|---|
| 讀取文檔 | SAXReader.read(File) | 返回 Document 對象 |
| 獲取屬性 | Element.attribute(String name) | 返回 Attribute 對象 |
| 遍歷屬性 | Element.attributeIterator() | 返回 Iterator<Attribute> |
| 新增屬性 | Element.addAttribute(name, value) | 直接添加 |
| 修改值 | Attribute.setValue(String value) | 就地修改 |
| 刪除屬性 | Element.remove(Attribute) | 從節點移除 |
| 寫入文件 | XMLWriter.write(Document) | 需配合 FileWriter |
writer.close() 釋放資源OutputFormat.setEncoding("UTF-8")@Test 便於驗證