1. 程式人生 > >java 使用dom4j解析xml

java 使用dom4j解析xml

準備工作

1.在src根目錄下新建一個xml檔案,如果是idea裡的maven專案也可以將xml檔案放在resources資料夾下,再點選project structure選中該資料夾點選mark as 中的Resources

2.如果是普通java專案需要匯入dom4j的包,如果是maven專案需要引入相關依賴

注:dom4j支援xpath用法不過在使用前需要引入依賴

下面附上maven需要的相關依賴

<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<!-- dom4j的依賴 -->
      <dependency>
          <groupId>dom4j</groupId>
          <artifactId>dom4j</artifactId>
          <version>1.6.1</version>
      </dependency>

<!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
<!-- 使用xpath需要引入的包 -->
      <dependency>
          <groupId>jaxen</groupId>
          <artifactId>jaxen</artifactId>
          <version>1.1.6</version>
      </dependency>

我建立的xml檔案stu.xml

<?xml version="1.0" encoding="UTF-8" ?>
<stus>
    <stu id ="10001">
        <name>張三</name>
        <age>18</age>
        <address>北京</address>
    </stu>
    <stu id ="10002">
        <name>李四</name>
        <age>20</age>
        <address>深圳</address>
    </stu>
</stus>

第一種方式使用SAX的方式解析xml

package xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class SAXReaderTest {
    public static void main(String[] args) {
        //1. 建立sax讀取物件
        SAXReader saxReader  =new SAXReader();
        try {
            //2. 指定解析的xml源
            //通過classLoder的方法載入stu.xml檔案
            Document document = saxReader.read(SAXReaderTest.class.getClassLoader().getResourceAsStream("stu.xml"));
            //3.獲取檔案根目錄
            Element rootElement = document.getRootElement();
            //列印xml源中的第一個name屬性的值
            System.out.println(rootElement.element("stu").element("name").getText());

            //獲取根元素下面的所有子元素 stu元素
            List<Element> elements = rootElement.elements();
            //遍歷所有的stu元素
            for (Element element : elements) {
                //獲取stu元素下面的name元素
                String name = element.element("name").getText();
                String age = element.element("age").getText();
                String address = element.element("address").getText();
                System.out.println("name="+name+",age="+age+",address="+address);
            }

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

}

第二種方式使用DOM的方式解析xml

package xml;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.DOMReader;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;

public class DomReaderText {

    public static void main(String[] args) {
        //建立工廠物件
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = null;
        org.w3c.dom.Document orgdoc = null;
        {
            try {
                db = dbf.newDocumentBuilder();
                //通過類載入器讀入xml檔案
                File file = new File(DomReaderText.class.getClassLoader().getResource("stu.xml").getPath());
                //通過DocumentBuilder 解析檔案返回 org.w3c.dom.Document物件
                orgdoc = db.parse(file);
            } catch (ParserConfigurationException e) {
                e.printStackTrace();
            } catch (SAXException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //新建一個DOMReader物件
        DOMReader domReader = new DOMReader();
        //DOMReader 讀入 org.w3c.dom.Document 物件
        Document document = domReader.read(orgdoc);

        Element rootElement = document.getRootElement();
        
        Element element = (Element) rootElement.selectSingleNode("//stu[@id='10001']/name");
        System.out.println(element.getText());
    }
}