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

Java 使用 JDOM 解析 XML 字串完整範例

     編輯:Java 相關知識

JDOM 是一個純 Java 的 XML 解析庫,API 直觀、記憶體效率較 DOM 佳,適合中小型 XML 文件處理。下面示範如何解析 XML 字串並提取巢狀元素資料。

Maven 依賴

<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom2</artifactId>
    <version>2.0.6</version>
</dependency>

完整解析程式碼

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.Namespace;
import org.jdom2.input.SAXBuilder;
import org.xml.sax.InputSource;
import java.io.StringReader;
import java.util.List;

public class JDomXmlParser {

    public void parseXmlString(String xmlContent) {
        try {
            // 1. 建立 SAXBuilder 並解析字串
            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build(new InputSource(new StringReader(xmlContent)));

            // 2. 取得根元素
            Element root = doc.getRootElement();
            System.out.println("根元素: " + root.getName());

            // 3. 處理命名空間(若 XML 有 xmlns)
            Namespace ns = root.getNamespace();

            // 4. 遍歷第一層子元素
            List<Element> rows = root.getChildren();
            for (Element row : rows) {
                // 取得帶命名空間的子元素文字
                String userId = row.getChildText("users_id", ns);
                String address = row.getChildText("users_address", ns);
                System.out.println("ID: " + userId + ", 地址: " + address);
            }

            // 5. 進一步遍歷第二層(若有)
            if (!rows.isEmpty()) {
                Element firstRow = rows.get(0);
                List<Element> subNodes = firstRow.getChildren();
                for (Element sub : subNodes) {
                    System.out.println("子節點名稱: " + sub.getName());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String xml = "\n" +
                "<Result xmlns=\"https://www.fiorano.com/fesb/activity/DBQueryOnInput2/Out\">\n" +
                "  <row resultcount=\"1\">\n" +
                "    <users_id>1001</users_id>\n" +
                "    <users_name>wangwei</users_name>\n" +
                "    <users_group>80</users_group>\n" +
                "    <users_address>1001號</users_address>\n" +
                "  </row>\n" +
                "  <row resultcount=\"1\">\n" +
                "    <users_id>1002</users_id>\n" +
                "    <users_name>wangwei</users_name>\n" +
                "    <users_group>80</users_group>\n" +
                "    <users_address>1002號</users_address>\n" +
                "  </row>\n" +
                "</Result>";

        new JDomXmlParser().parseXmlString(xml);
    }
}

關鍵點說明

  1. SAXBuilder:採用 SAX 事件驅動解析,記憶體佔用低,適合串流或字串輸入。
  2. InputSource + StringReader:將字串包裝為標準 XML 輸入源。
  3. Namespace 處理:XML 根元素宣告 xmlns 時,子元素隸屬該命名空間,getChildText(name, ns) 必須傳入 Namespace 物件,否則取不到值。
  4. Element API:
    • getChildren():取得所有直接子元素(List<Element>)
    • getChildText(name, ns):直接取得子元素文字內容,自動處理 null
    • getAttributeValue(name):取得屬性值

輸出結果

根元素: Result
ID: 1001, 地址: 1001號
ID: 1002, 地址: 1002號
子節點名稱: users_id
子節點名稱: users_name
子節點名稱: users_group
子節點名稱: users_address

JDOM 的流暢 API 讓 XML 解析代碼極具可讀性,若專案需處理大型 XML 或高效能串流場景,可考慮 StAX (XMLStreamReader) 或 SAX 原生 API。

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