美文网首页
XML文件的解析

XML文件的解析

作者: 愚思 | 来源:发表于2021-10-30 14:22 被阅读0次

    使用 dom4j 进行解析

    1.添加dom4j的依赖
    2.使用 File 加载到本地文件后,交给SAXReader解析,它解析完成后将xml文件中的标签包装成一个Document对象返回,需要操作的元素,都在这个Document对象中。

    //灵活更换为需要的路径
    String filePath = "C:\\Users\\CHY\\Desktop\\restUrl.xml";
    //读取xml配置文件
    File file = new File(filePath);
    //交给SAXRead去解析
    Document document = new SAXReader().read(file);
    

    3.根据需要去获取标签值或者属性值,进行自己的逻辑处理。
    4.简单演示
    A、引入依赖

    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
    

    B、现有XML文件如下

    <services>
        <service isUsable="true">
            <restUrl>/register/user-info/create</restUrl>
            <serviceID>USER_RegisterUserInfo_A</serviceID>
        </service>
        <service isUsable="true">
            <restUrl>/update/user-info/update</restUrl>
            <serviceID>USER_UpdateUserInfo_U</serviceID>
        </service>
        <service isUsable="false">
            <restUrl>/delete/user-info/delete</restUrl>
            <serviceID>USER_DeleteUserInfo_D</serviceID>
        </service>
    </services>
    

    C、代码部分

    public static void main(String[] args) throws DocumentException {
        String filePath = "C:\\Users\\CHY\\Desktop\\restUrl.xml";
        File file = new File(filePath);
        Document document = new SAXReader().read(file);
        Element root = document.getRootElement();
        //根元素下的所有
        List<Element> elements = root.elements();
        for (Element service : elements) {
            List<Element> delegateElement = service.elements();
            for (Element e : delegateElement) {
                //变迁名称的匹配,并获取其值
                if ("restUrl".equals(e.getName())) {
                    System.out.println("restUrl====" + e.getStringValue());
                }
                if ("serviceID".equals(e.getName())) {
                    System.out.println("serviceID====" + e.getStringValue());
                }
            }
        }
    }
    

    D、运行截图


    xml读取

    E、代码中有一个service标签的isUsable标签为false,只要在循环上加上对属性的判断就好了,上代码。

    //根元素下的所有
    List<Element> elements = root.elements();
    //获取到services节点下的service节点的List
    List<Element> list = root.elements("service");
    System.out.println(list.size());
    for (Element service: elements){
        //当前service有效时才回去解析
        if ("true".equals(service.attributeValue("isUsable"))){
            List<Element> delegateElement = service.elements();
            for (Element e:delegateElement) {
                //变迁名称的匹配,并获取其值
                if ("restUrl".equals(e.getName())){
                    System.out.println("restUrl===="+e.getStringValue());
                }
                if ("serviceID".equals(e.getName())){
                    System.out.println("serviceID===="+e.getStringValue());
                }
            }
        }
    }
    

    截图,看结果,总共有三个标签,但只有两个有效


    有效标签的解析

    如果在标签里,涉及到多个属性的,其实可以考虑将service标签里的内容封装到Service的对象中去,进而添加到List或是Map中去,用的时候直接去取出就行。

    相关文章

      网友评论

          本文标题:XML文件的解析

          本文链接:https://www.haomeiwen.com/subject/dmwgaltx.html