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

Java 使用 DOM4J 解析 XML 節點完整教學與範例碼

     編輯:Java 相關知識

DOM4J 簡介與環境準備

DOM4J 是 Java 操作 XML 的優秀庫,API 直觀、支援 XPath、效能優異。Maven 依賴:


    org.dom4j
    dom4j
    2.1.4

範例 XML(contact.xml)



    
        張三
        20
        134222223333
        zhangsan@qq.com
        432221111
    
    
        李四
        20
        134222225555
        lisi@qq.com
        432222222
    
    
        王五
        32
        465431341
        af@qq.com
        46164694
    
    測試
    其他用途

核心 API 實戰

import org.dom4j.*;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;

public class Dom4jDemo {
    public static void main(String[] args) throws DocumentException {
        // 1. 讀取文檔
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/contact.xml"));

        // 2. 獲取根元素
        Element root = document.getRootElement();
        System.out.println("根節點:" + root.getName()); // contactList

        // 3. 獲取直接子元素(非遞歸)
        List children = root.elements();
        for (Element e : children) {
            System.out.println("一級子節點:" + e.getName());
        }

        // 4. 獲取指定名稱的子元素(第一個)
        Element contactElem = root.element("contact");
        System.out.println("第一個 contact 子節點:" + contactElem.getName());

        // 5. 獲取指定元素的所有子元素
        List contactChildren = contactElem.elements();
        for (Element e : contactChildren) {
            System.out.println("contact 子節點:" + e.getName());
        }

        // 6. 遞歸遍歷所有節點(含文本、屬性等)
        System.out.println("\n=== 遞歸遍歷 ===");
        printTree(root, 0);

        // 7. 多層級路徑獲取
        Element nameElem = root.element("contact").element("name");
        System.out.println("\n深層節點:" + nameElem.getName() + " = " + nameElem.getText());
    }

    private static void printTree(Element element, int level) {
        String indent = "  ".repeat(level);
        System.out.println(indent + "元素:" + element.getQualifiedName());
        // 處理屬性
        for (Attribute attr : element.attributes()) {
            System.out.println(indent + "  屬性:" + attr.getName() + "=" + attr.getValue());
        }
        // 處理文本內容
        String text = element.getTextTrim();
        if (!text.isEmpty()) {
            System.out.println(indent + "  文本:" + text);
        }
        // 遞歸子元素
        for (Element child : element.elements()) {
            printTree(child, level + 1);
        }
    }
}

進階技巧

  • XPath 查詢:List nodes = document.selectNodes("//contact[@id='001']/name");
  • 命名空間處理:使用 NamespaceContext 配合 XPath。
  • 寫入 XML:XMLWriter writer = new XMLWriter(new FileWriter("out.xml")); writer.write(document);
  • 大文件流式處理:SAXReader 配合 ElementHandler 避免全量載入記憶體。

常見坑點

總結

DOM4J 以靈活的樹模型、豐富的查詢 API、良好的效能平衡,成為 Java XML 處理的首選之一。掌握 Document、Element、Attribute 核心類別協作,配合 XPath,能輕鬆應對複雜 XML 業務場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
問題解決
中文亂碼確保 XML 聲明 encoding、讀寫時指定 UTF-8
元素名稱大小寫敏感XML 區分大小寫,代碼中需完全匹配
預設命名空間導致 XPath 無結果註冊命名空間前綴後再查詢