首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java XML 處理完全指南:DOM、DOM4J 解析與生成實戰

     編輯:Java 綜合教學

XML 基礎認知

XML(可擴展標記語言)用於標記數據、定義類型,適合網絡傳輸。與 HTML 對比:

  • XML 關注數據內容(傳輸/存儲),標簽自定義,自我描述。
  • HTML 關注數據外觀(顯示),標簽預定義。
<bookstore>
  <book category="CHILDREN">
    <title>Harry Potter</title>
    <author>J.K. Rowling</author>
    <year>2005</year>
    <price>35.2</price>
  </book>
</bookstore>

DOM 方式解析 XML

DOM 將整個文檔加載到內存形成樹結構,適合中小型文檔。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("language.xml"));

Element root = document.getDocumentElement();
System.out.println("cat=" + root.getAttribute("cat"));

NodeList list = root.getElementsByTagName("lan");
for (int i = 0; i < list.getLength(); i++) {
    Element lan = (Element) list.item(i);
    System.out.println("id=" + lan.getAttribute("id"));
    NodeList children = lan.getChildNodes();
    for (int j = 0; j < children.getLength(); j++) {
        Node node = children.item(j);
        if (node instanceof Element) {
            System.out.println(node.getNodeName() + "=" + node.getTextContent());
        }
    }
}

輸出:

cat=it
id=1
name=java
ide=Eclipse
id=2
name=Swift
ide=Xcode
id=3
name=C#
ide=Visual Studio

DOM 方式生成 XML

從內到外創建節點,最後用 Transformer 輸出。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();

Element root = document.createElement("Languages");
root.setAttribute("cat", "it");

// 創建 lan1
Element lan1 = document.createElement("lan");
lan1.setAttribute("id", "1");
lan1.appendChild(createElementWithText(document, "name", "Java"));
lan1.appendChild(createElementWithText(document, "ide", "Eclipse"));

// ... 同理創建 lan2, lan3
root.appendChild(lan1);
root.appendChild(lan2);
root.appendChild(lan3);
document.appendChild(root);

// 輸出到字符串或文件
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(document), new StreamResult(writer));
System.out.println(writer.toString()); // 控制台輸出
transformer.transform(new DOMSource(document), new StreamResult(new File("newxml.xml"))); // 寫文件

DOM4J:更優雅的 XML 操作庫

DOM4J 性能優異、API 友好,需引入第三方 JAR。

String xmlString = "<bookstore><book><title>...</title></book></bookstore>";
Document document = DocumentHelper.parseText(xmlString);

// 打印
System.out.println(document.asXML());

// 寫文件
XMLWriter writer = new XMLWriter(new FileWriter("book.xml"));
writer.write(document);
writer.close();

刷新項目目錄即可看到生成的 book.xml。

技術選型建議

  • DOM:JDK 內置,無依賴,適合簡單場景、小文檔。
  • DOM4J:API 更豐富(XPath、命名空間支持),大文檔性能更好,企業級開發首選。
  • SAX/StAX:流式解析,內存佔用極低,適合超大文檔(本文未覆蓋)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved