Java获取XML节点总结之读取XML文档节点


       dom4j是适用于Java的灵活XML框架,是用来读写XML文件的。首先要做的第一件事儿就是分析某种类型的xml文档,定义如下:
  

  SAXReader reader = new SAXReader();
  Document document = reader.read(url);

    如果您必须遍历大型 XML 文档树,那么为了提高性能,我们建议您使用快速循环方法,该方法可避免为每个循环创建对象的成本,文档示例:

public void treeWalk(Document document) {
    treeWalk(document.getRootElement());
}

public void treeWalk(Element element) {
    for (int i = 0, size = element.nodeCount(); i < size; i++) {
        Node node = element.node(i);
        if (node instanceof Element) {
            treeWalk((Element) node);
        }
        else {
            // do something…
        }
    }
}

  我在项目中的应用:

 private static void getChildNodes(Element element) {
        Iterator<Node> item = element.nodeIterator();
        while (item.hasNext()) {
            Node node = item.next();
            if (node instanceof Element) {
                Element el = (Element) node;
                int count = el.attributeCount();
                if (count!=0) {
                    String nameValue = el.attributeValue("name");
                    System.out.println(nameValue);
                }
                getChildNodes(el);
            }
        }
    }

       以下是我在项目中用的完整例子:

           代码文件:

package com.zxt.code3.codeexample.base;

import org.apache.commons.lang3.StringUtils;
import org.dom4j.*;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.List;

/**
 * @author zty
 * @description
 * @date 2022/3/12
 */
public class Exmple {
    public static void main(String[] args) throws DocumentException, MalformedURLException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(new File("D://rv4d_menus_new.xml"));
        /**
         * 节点对象的操作方法
         */
        //获取文档根节点
        Element root = document.getRootElement();
        List<Element> list = root.elements();
        //遍历list取值
        for (Element element : list) {
            //使用递归函数
            getChildNodes(element);
        }
    }

    /**
     * 递归查询节点函数,输出节点名称
     *
     * @param element
     */
    private static void getChildNodes(Element element) {
        Iterator<Node> item = element.nodeIterator();
        while (item.hasNext()) {
            Node node = item.next();
            if (node instanceof Element) {
                Element el = (Element) node;
                int count = el.attributeCount();
                if (count!=0) {
                    String nameValue = el.attributeValue("name");
                    System.out.println(nameValue);
                }
                getChildNodes(el);
            }
        }
    }
}

      对应的xml文件(rv4d_menus_new.xml)

<?xml version="1.0" encoding="UTF-8"?>
<Menus>

    <Module name = "1011">
        <Menu name = "光缆网">
            <item name="光缆割接分析" reportId="gjfx.gqfx.tj"/>
            <item name="光业务信息查询">
                <url>
                        <![CDATA[
                            ../content/page/fibersupport/fiberinfo.jsp
                            ]]>
                </url>
            </item>
            <item name="光缆坏端口统计" reportId="glhdktj"/>
            <!-- <item name="设备接入号统计" reportId="sbjrhtj"></item> -->
            <item name="光缆坏端口统计(成电专用)" reportId="glhdktj.cd"/>
            <item name="中继光缆数据质量检查" reportId="zjgl.zjglsjzljc"/>
            <item name="运营局中继光缆数据质量检查" reportId="zjgl.yyjzjglsjzljc"/>
            <item name="本地光缆设备量统计汇总表" reportId="bd.glsbl.hzb"/>
            <item name="本地光缆设备量统计汇总表(城市R分表)" reportId="bd.glsbl.csfb"/>
            <item name="本地光缆设备量统计汇总表(农村分表)" reportId="bd.glsbl.ncfb"/>
            <item name="未归属到运营分局光缆设备量统计表" reportId="bd.glsbl.hzb.sz"/>
            <item name="光缆分级统计" reportId="local.zqczgl.hzb.par"/>
            <item name="一分以上光缆资源二维码标签完成率" reportId="yfysglzyeym" />
            <item name="管线资源属性完好率统计" reportId="res.remote.check.data"/>
        </Menu>        
    </Module>
    <Module name = "1012">
        <Menu name = "传输网">
                <item name="传输电路查询">
                    <url>
                            <![CDATA[
                            ../Router/gotoQuery.action?dtoType=rmp.rv4.dataview.biz.service.route.TransDTO&serviceName=rmp.rv4.dataview.biz.service.route.RouteService&queryMethod=findTransWithPage
                            ]]>
                    </url>
                </item>
                <item name="传输设备割接分析" reportId="gjfx.csfx.tj"/>
                <item name="传输电路历史查询">
                    <url>
                            <![CDATA[
                            ../Router/gotoQuery.action?dtoType=rmp.rv4.dataview.biz.service.route.TransHisDTO&serviceName=rmp.rv4.dataview.biz.service.route.RouteService&queryMethod=findTransHisWithPage
                            ]]>
                    </url>
                </item>
                <item name="局端MSAP端口信息查询" reportId="pztj.msapdkcx"/>
                <item name="传输电路资源详情" reportId="pztj.csdlzyxq"/>
        </Menu>        
    </Module>
</Menus>

注意:github下载:http://dom4j.github.io/


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM