Spring如何讀取xml配置文件的


我們通過一個小案例來看xml解析過程。

1. 導包

    <dependencies>
        <!-- xml解析工具 -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <!-- 常用工具包 -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

2. xml文件

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user1 id="001">
        <id>01</id>
        <name>周傑倫</name>
        <age>23</age>
        <job>歌手</job>
    </user1>
    <user2 id="002">
        <id>02</id>
        <name>胡歌</name>
        <age>24</age>
        <job>演員</job>
    </user2>
</users>  

 3. 測試代碼

import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;
/**
 * spring讀取xml配置的過程
 */
public class Test {
    
    public static void main(String[] args) throws SAXException, DocumentException {
        Test t = new Test();
        SAXReader saxReader = new SAXReader();
        // 讀取文件
        Document read = saxReader.read(t.getClassPath("user.xml"));
        // 獲取根節點
        Element rootElement = read.getRootElement();
        t.getNodes(rootElement);
    }
    // 1. 通過文件名獲取輸入流
    public InputStream getClassPath(String xmlPath) {
        InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream(xmlPath);
        return resourceAsStream;
    }
    // 2. 獲取節點信息
    public static void getNodes(Element rootElement) {
        System.out.println("獲取當前名稱:" + rootElement.getName());
        // 獲取屬性信息
        List<Attribute> attributes = rootElement.attributes();
        for (Attribute attribute : attributes) {
            System.out.println("屬性:" + attribute.getName() + " : " + attribute.getText());
        }
        // 獲取屬性value
        String value = rootElement.getTextTrim();
        if (!StringUtils.isEmpty(value)) {
            System.out.println("value:" + value);
        }
        // 使用迭代器遍歷,繼續遍歷子節點
        Iterator<Element> elementIterator = rootElement.elementIterator();
        while (elementIterator.hasNext()) {
            Element next = elementIterator.next();
            getNodes(next);
        }
    }
}

======================
【控制台輸出】
獲取當前名稱:users
獲取當前名稱:user1
屬性:id : 001
獲取當前名稱:id
value:01
獲取當前名稱:name
value:周傑倫
獲取當前名稱:age
value:23
獲取當前名稱:job
value:歌手
獲取當前名稱:user2
屬性:id : 002
獲取當前名稱:id
value:02
獲取當前名稱:name
value:胡歌
獲取當前名稱:age
value:24
獲取當前名稱:job
value:演員

spring解析xml配置文件過程:

Dom4j與Sax區別
  dom4j不適合大文件的解析,因為它是一下子將文件加載到內存中,所以有可能出現內存溢出,sax是基於事件來對xml進行解析的,所以他可以解析大文件的xml,也正是因為如此,所以dom4j可以對xml進行靈活的增刪改查和導航,而sax沒有這么強的靈活性,所以sax經常是用來解析大型xml文件,而要對xml文件進行一些靈活(crud)操作就用dom4j。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM