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。

原文地址:https://www.cnblogs.com/wlwl/p/10109310.html