zoukankan      html  css  js  c++  java
  • dom4j解析带命名空间的xml

    需要被解析的xml文件如下:

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
     3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     4 <soap:Body>
     5 <GetNewDataResponse xmlns="sobey.com.LBControlService/">
     6 <GetNewDataResult>
     7 <RtnValue>
     8 <ClientState IP="172.21.40.99" LASTTIME="2012-07-06 15:50:58" />
     9 <GenaralInfo DeviceID="470" Status="0" DataCaptureIP="xw-netmanage-2" DataCaptureTime="2012-07-06 15:23:20" >
    10  <key> 22 </key>
    11  <key> 2 3 </key>
    12 </GenaralInfo>
    13 <GenaralInfo DeviceID="470" Status="0" DataCaptureIP="xw-netmanage-2" DataCaptureTime="2012-07-06 15:23:22" >
    14 <key22> 24 </key22>
    15 </GenaralInfo>
    16 <GenaralInfo DeviceID="469" Status="0" DataCaptureIP="xw-netmanage-2" DataCaptureTime="2012-07-06 15:24:04" >
    17 <key> 55 </key>
    18 </GenaralInfo>
    19 </RtnValue>
    20 </GetNewDataResult>
    21 </GetNewDataResponse>
    22 </soap:Body>
    23 </soap:Envelope>

    注意:需要添加包dom4j-1.6.1.jar,jaxen-1.1-beta-9.jar

    package src.liweiTest.dom4j;
    import java.util.List;
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class TestDom4j
    {
        public static void main(String[] args) throws Exception
        {
            System.out.println("test1()***********************************************");
            test1();
            System.out.println("test2()***********************************************");
            test2();
        }
    
        // 取xml中的域名解析
        public static void test1() throws DocumentException
        {
            SAXReader reader = new SAXReader();
            Document document = reader.read(TestDom4j.class.getResourceAsStream("/result.xml"));
            Element e = document.getRootElement();
            // 取节点名字是GenaralInfo而且其中属性DeviceID=470的元素的集合
            // @DeviceID=470 表示的是属性 local-name()='GenaralInfo'表示的是节点名称 namespace-uri()表示域名空间
            List<Element> list = e.selectNodes("//*[@DeviceID=470 and local-name()='GenaralInfo' and namespace-uri()='sobey.com.LBControlService/']");
            for (Element ee : list)
            {
                // ee.asXML()把Element 元素转换成String
                // System.out.println(ee.asXML());
                // 取得元素中Status属性值为0的子元素的值
                Attribute Status = ee.attribute("Status");
                String StatusValue = Status.getValue();
                if (Status != null)
                {
                    if ("0".equals(StatusValue))
                    {
                        List<Element> keys = ee.selectNodes(".//*[local-name()='key' and namespace-uri()='sobey.com.LBControlService/']");
                        for (Element key : keys)
                        {
                            System.out.println("key.value is :" + key.getTextTrim());
                        }
                    }
                }
            }
        }
    
        // 取出xml中的空间名称,并且给域名赋予别名
        public static void test2() throws DocumentException
        {
            SAXReader reader = new SAXReader();
            Document d = reader.read(TestDom4j.class.getResourceAsStream("/result.xml"));
            Document document = DocumentHelper.parseText(d.asXML());
            // ee.asXML()把Element 元素转换成String
            System.out.println(d.asXML());
            Element root = document.getRootElement();
            root.addNamespace("s", "sobey.com.LBControlService/");
            List<Element> list = root.selectNodes("//s:GenaralInfo");
            for (Element e : list)
            {
                // System.out.println(e.asXML());
                // 取得元素中Status属性值为0的子元素的值
                Attribute Status = e.attribute("Status");
                // 获取属性的值
                if (Status != null)
                {
                    String StatusValue = Status.getValue();
                    if ("0".equals(StatusValue))
                    {
                        // e.selectNodes(".//s:key")获取当前节点下元素key的值;e.selectNodes("//s:key")获取所有元素为key的值;记得加“//s:”
                        List<Element> keys = e.selectNodes(".//s:key");
                        for (Element key : keys)
                        {
                            System.out.println("key.value is :" + key.getTextTrim());
                        }
                    }
                }
            }
        }
    }
  • 相关阅读:
    Busybox制作ARM(iTOP4412) 根文件系统
    01.高并发底层原理
    设计模式
    高并发实战
    # 记一次shell编写
    shell if条件语句
    scrapy使用
    整理JAVA知识点--基础篇,能力有限不足地方请大神们帮忙完善下
    mybatis-generator使用
    优先级队列实现
  • 原文地址:https://www.cnblogs.com/liwei45212/p/3028512.html
Copyright © 2011-2022 走看看