• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

老王的蜕变

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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());
                    }
                }
            }
        }
    }
}

 

posted on 2013-04-18 15:03  老王的蜕变  阅读(897)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3