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。

posted @   吴磊的  阅读(10983)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
//生成目录索引列表
点击右上角即可分享
微信分享提示