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

Java 解析 XML 四大方式對比:DOM、DOM4J、JDOM、SAX 選型指南

     編輯:Java 綜合教學

Java 解析 XML 四大方式對比與選型指南

XML 作為經典數據交換格式,Java 提供多種解析 API。本文對比 DOM、DOM4J、JDOM、SAX 四種主流方式,附完整代碼示例與性能特點分析。

一、樣例 XML

<?xml version="1.0" encoding="GB2312"?>
<RESULT>
  <VALUE>
    <NO>A1234</NO>
    <ADDR>河南省鄭州市</ADDR>
  </VALUE>
  <VALUE>
    <NO>B1234</NO>
    <ADDR>河南省鄭州市二七區</ADDR>
  </VALUE>
</RESULT>

二、四種方式代碼實現

1. DOM (JDK 內置,W3C 標準)

特點:樹模型,一次性將整個文檔載入內存,隨機訪問靈活,但大文件極其消耗內存。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("data.xml"));
NodeList nl = doc.getElementsByTagName("VALUE");
for (int i = 0; i < nl.getLength(); i++) {
    String no = doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue();
    String addr = doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue();
    System.out.println("車牌:" + no + " 地址:" + addr);
}

2. DOM4J (第三方,開發體驗最佳)

特點:API 友好,支持 XPath、命名空間、可寫入 XML,內存佔用略低於 DOM,企業級首選。

SAXReader reader = new SAXReader();
Document doc = reader.read(new File("data.xml"));
Element root = doc.getRootElement();
for (Iterator i = root.elementIterator("VALUE"); i.hasNext(); ) {
    Element foo = (Element) i.next();
    System.out.println("車牌:" + foo.elementText("NO") + " 地址:" + foo.elementText("ADDR"));
}
// XPath 示例:List<Node> nodes = doc.selectNodes("//VALUE/NO");

3. JDOM (第三方,純 Java 設計)

特點:API 更符合 Java 集合習慣(List),無接口依賴具體類,但功能較 DOM4J 弱,現較少新項目採用。

SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("data.xml"));
Element root = doc.getRootElement();
List<Element> children = root.getChildren("VALUE");
for (Element child : children) {
    System.out.println("車牌:" + child.getChildText("NO") + " 地址:" + child.getChildText("ADDR"));
}

4. SAX (JDK 內置,事件驅動流式解析)

特點:不載入整樹,內存佔用極低(常數級),適合超大文件;但只能順序讀寫,無法隨機訪問,編碼較繁瑣(需繼承 DefaultHandler 重寫事件方法)。

public class SaxHandler extends DefaultHandler {
    private Stack<String> tags = new Stack<>();
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attrs) {
        tags.push(qName);
    }
    @Override
    public void characters(char[] ch, int start, int length) {
        String tag = tags.peek();
        if ("NO".equals(tag)) System.out.print("車牌:" + new String(ch, start, length));
        if ("ADDR".equals(tag)) System.out.println(" 地址:" + new String(ch, start, length));
    }
}
// 使用
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
sp.parse(new File("data.xml"), new SaxHandler());

三、綜合對比表

維度DOMDOM4JJDOMSAX
內存佔用高(全樹載入)中中極低(流式)
訪問模式隨機隨機 + XPath隨機順序只讀
寫入/修改 XML支持最強支持不支持
學習曲線中低低高(事件模型)
依賴無 (JDK)dom4j.jarjdom.jar無 (JDK)
適用場景小文件、需隨機修改企業級通用首選教學、輕量項目超大文件、只讀、內存受限

四、選型建議

  1. 一般業務開發:優先 DOM4J,API 友好、功能全、社區成熟。
  2. 不想引入第三方包:小文件用 DOM,大文件用 SAX。
  3. Android / 受限環境:JDK 內置 DOM/SAX,或輕量級 Simple XML / Pull Parser。
  4. 高性能流式處理:SAX 或 StAX (JDK 1.6+),雙向游標、可寫入。

現代項目中,JSON 已大幅替代 XML;若必須處理 XML,DOM4J 仍是生產環境最穩妥選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved