• 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。

  • 相关阅读:
    Struts 2读书笔记拦截器之拦截器的配置
    Struts 2读书笔记使用Struts 2控制文件上传
    javaScript数组使用字符串作为下标
    Struts 2读书笔记拦截器之示例:使用拦截器完成权限控制
    Struts 2读书笔记Struts 2的自定义类型转换器
    Struts 2读书笔记使用Struts 2的输入校验
    Struts 2读书笔记Struts 2实现文件过滤
    关于Struts 2文件上传报错:Unable to find 'struts.multipart.saveDir' property setting
    oraclehttp://localhost:5560/isqlplus 打不开的解决方案
    Struts 2读书笔记struts 的action配置
  • 原文地址:https://www.cnblogs.com/wlwl/p/10109310.html
Copyright © 2020-2023  润新知