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