zoukankan      html  css  js  c++  java
  • Java使用Dom4J 遍历复杂XML节点

    public void analysisXML() throws DocumentException {
    		SAXReader saxread = new SAXReader();
    		File xmlFile = new File("idcMonitor.xml");
    		if (xmlFile.exists()) {
    			Document document = saxread.read(xmlFile);// 读取XML文件
    			List<Element> houseMonitorList = document.selectNodes("//idcMonitor/houseMonitor"); //找到位于idcMonitor下的houseMonitor节点
    			for (int i = 0; i < houseMonitorList.size(); i++) {
    				Element houseMonitor=houseMonitorList.get(i);
    				Element id=(Element) houseMonitor.selectSingleNode("id"); //获得houseMonitor节点下的id值
    				System.out.println(id.getName()+"   "+id.getTextTrim());
    				Element ip=(Element) houseMonitor.selectSingleNode("ip"); //获得houseMonitor节点下的ip值
    				System.out.println(ip.getName()+"   "+ip.getTextTrim());
    				Element port=(Element) houseMonitor.selectSingleNode("port"); //获得houseMonitor节点下的port值
    				System.out.println(port.getName()+"   "+port.getTextTrim());
    				Element domain=(Element) houseMonitor.selectSingleNode("domain"); //获得houseMonitor节点下的domain值
    				System.out.println(domain.getName()+"   "+domain.getTextTrim());
    				Element serviceType=(Element) houseMonitor.selectSingleNode("serviceType"); //获得houseMonitor节点下的serviceType值
    				System.out.println(serviceType.getName()+"   "+serviceType.getTextTrim());
    				Element firstFound=(Element) houseMonitor.selectSingleNode("firstFound"); //获得houseMonitor节点下的firstFound值
    				System.out.println(firstFound.getName()+"   "+firstFound.getTextTrim());
    				Element lastFound=(Element) houseMonitor.selectSingleNode("lastFound"); //获得houseMonitor节点下的lastFound值
    				System.out.println(lastFound.getName()+"   "+lastFound.getTextTrim());
    				Element illegalInfo=(Element)houseMonitor.selectSingleNode("illegalInfo");//获得houseMonitor节点下的illegalInfo值
    				Iterator<Element> illegalInfoIterator=illegalInfo.elementIterator();
    				while(illegalInfoIterator.hasNext())
    				{
    					Element temporary=illegalInfoIterator.next();
    					System.out.println(temporary.getName()+"   "+temporary.getTextTrim());
    				}
    				Element ipInfo=(Element)houseMonitor.selectSingleNode("ipInfo");//获得houseMonitor节点下的ipInfo值
    				Iterator<Element> ipInfoIterator=ipInfo.elementIterator();
    				while(ipInfoIterator.hasNext())
    				{
    					Element temporary=ipInfoIterator.next();
    					System.out.println(temporary.getName()+"   "+temporary.getTextTrim());
    				}
    				
    				System.out.println("---------------------");
    			}
    		}
    	}
    

    这里使用了Dom4JselectNodes()selectSingleNode()还有迭代elementIterator()方法;

    selectNodes()方法是指定节点,注意这后面的是有"s"的;

    List<Element> houseMonitorList = document.selectNodes("//idcMonitor/houseMonitor"); //找到位于idcMonitor下的houseMonitor节点
    

    selectSingleNode()方法是获得单个节点的,后上面的selectNodes()方法是相对的

    Element illegalInfo=(Element)houseMonitor.selectSingleNode("illegalInfo");//获得houseMonitor节点下的illegalInfo值
    

    elementIterator()方法是迭代这个节点下面的节点,但是如果这个迭代之后的节点还有节点,这个迭代器是不会进入的,也就是这个迭代器只会进入一层。

    Element illegalInfo=(Element)houseMonitor.selectSingleNode("illegalInfo");//获得houseMonitor节点下的illegalInfo值
    				Iterator<Element> illegalInfoIterator=illegalInfo.elementIterator();
    				while(illegalInfoIterator.hasNext())
    				{
    					Element temporary=illegalInfoIterator.next();
    					System.out.println(temporary.getName()+"   "+temporary.getTextTrim());
    				}
    

    最后看看上面执行的结果:

    id   123
    ip   10.2.45.123
    port   100
    domain   www.sina.com
    serviceType   1
    firstFound   2013-08-21 12:33:22
    lastFound   2013-08-21 13:00:00
    illegalType   1
    currentState   1
    user   admin
    icpError   0
    regError   1
    regDomain   www.baidu.com
    ---------------------
    id   456
    ip   10.2.45.456
    port   200
    domain   www.baidu.com
    serviceType   3
    firstFound   2013-08-29 12:33:22
    lastFound   2013-08-30 13:00:00
    illegalType   2
    currentState   2
    user   admin2
    icpError   1
    regError   2
    regDomain   www.ambimmort.com
    ---------------------
    

    当然最后附上原始解析的XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <idcMonitor>
        <commandId>201020000000169282</commandId>
        <idcId>1019</idcId>
        <monitorState>1</monitorState>
        <houseMonitor>
            <id>123</id>
            <ip>10.2.45.123</ip>
            <port>100</port>
            <domain>www.sina.com</domain>
            <serviceType>1</serviceType>
            <firstFound>2013-08-21 12:33:22</firstFound>
            <lastFound>2013-08-21 13:00:00</lastFound>
            <illegalInfo>
                <illegalType>1</illegalType>
                <currentState>1</currentState>
                <user>admin</user>
            </illegalInfo>
            <ipInfo>
                <icpError>0</icpError>
                <regError>1</regError>
                <regDomain>www.baidu.com</regDomain>
            </ipInfo>
        </houseMonitor>
        <houseMonitor>
            <id>456</id>
            <ip>10.2.45.456</ip>
            <port>200</port>
            <domain>www.baidu.com</domain>
            <serviceType>3</serviceType>
            <firstFound>2013-08-29 12:33:22</firstFound>
            <lastFound>2013-08-30 13:00:00</lastFound>
            <illegalInfo>
                <illegalType>2</illegalType>
                <currentState>2</currentState>
                <user>admin2</user>
            </illegalInfo>
            <ipInfo>
                <icpError>1</icpError>
                <regError>2</regError>
                <regDomain>www.ambimmort.com</regDomain>
            </ipInfo>
        </houseMonitor>
        <timeStamp>2013-08-22 12:57:13</timeStamp>
    </idcMonitor>
  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/liangdelin/p/3314982.html
Copyright © 2011-2022 走看看