dom4j 解析带命名空间的XML

//既然是使用DOM4J解析,当然需要在工程中把dom4j_1.6.1.jar包加载进去

/**解析的result.xml文件内容如下**/


 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 
  
   
    
     
     
       22
       2 3
     

     
      24
     

     
    

   

  

 

//解析的java方法如下,其中解析带命名空间的xml方式有3种,这里列举两种常用的

package test;

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 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();
   System.out.println(StatusValue);
   if(Status!=null){
    if("0".equals(StatusValue)){
     List keys= ee.selectNodes(".//*[local-name()='key' and namespace-uri()='sobey.com.LBControlService/']");
     for(Element key : keys){
      System.out.println("key.value is :"+key.getTextTrim());
     }
    }
   }
   System.out.println("**********************************************************************");
  }
 }
 //取出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 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 keys= e.selectNodes(".//s:key");
     for(Element key : keys){
      System.out.println("key.value is :"+key.getTextTrim());
     }
    }
   }
  }
 }
}
工程截图如下:

 

你可能感兴趣的:(java,xml,dom4j)