dom4j解析带命名空间的xml
需要被解析的xml⽂件如下:
1<?xml version="1.0" encoding="utf-8" ?>
使用dom4j解析xml文件2<soap:Envelope xmlns:soap="/soap/envelope/"
3xmlns:xsi="/2001/XMLSchema-instance" xmlns:xsd="/2001/XMLSchema">
4<soap:Body>
5<GetNewDataResponse xmlns="sobey.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 = ad(ResourceAsStream("/l"));
Element e = RootElement();
// 取节点名字是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.LBControlService/']");
for (Element ee : list)
{
// ee.asXML()把Element 元素转换成String
// System.out.println(ee.asXML());
// 取得元素中Status属性值为0的⼦元素的值
Attribute Status = ee.attribute("Status");
String StatusValue = Value();
if (Status != null)
{
if ("0".equals(StatusValue))
{
List<Element> keys = ee.selectNodes(".//*[local-name()='key' and namespace-uri()='sobey.LBControlService/']");
for (Element key : keys)
{
System.out.println("key.value is :" + TextTrim());
}
}
}
}
}
// 取出xml中的空间名称,并且给域名赋予别名
public static void test2() throws DocumentException
{
SAXReader reader = new SAXReader();
Document d = ad(ResourceAsStream("/l"));
Document document = DocumentHelper.parseText(d.asXML());
// ee.asXML()把Element 元素转换成String
System.out.println(d.asXML());
Element root = RootElement();
root.addNamespace("s", "sobey.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 = Value();
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 :" + TextTrim());
}
}
}
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。