帶命名空間的XML的dom4j應用<轉>

來源:互聯網
上載者:User

標籤:

Element root = document.getRootElement();  
   
List   recordenvlist = document.selectNodes("//gml:envelope");     //gml:envelope 

提示 NoClassDefFoundError org.dom4j.DocumentFactory.createXPath 原因:dom4j的xpath api依賴jaxen完成解決方案:在系統中加入jaxen.jar.jaxen.jar下載路徑:http://jaxen.codehaus.org/releases.htmldom4j-1.6.1.jar下載路http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.jar 


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 

使用dom4j的xPath解析XML 

一般的XML 
國外的dom4j已經很流行了,國內的相關資料相對較少,但普及風暴也即將到來。我們公司(老外開的)解析XML就是用的dom4j。 
今天公司沒事做,自己也寫一個小例子貼上來,嘻~~ 

Xml代碼  
  1. books.xml:  
  2. <?xml version="1.0" encoding="UTF-8"?>  
  3. <books>  
  4.     <!--This is a test for dom4j, jakoes, 2007.7.19-->  
  5.     <book show="yes" url="lucene.net">  
  6.         <title id="456">Lucene Studing</title>  
  7.     </book>  
  8.     <book show="yes" url="dom4j.com">  
  9.         <title id="123">Dom4j Tutorials</title>  
  10.     </book>  
  11.     <book show="no" url="spring.org">  
  12.         <title id="789">Spring in Action</title>  
  13.     </book>  
  14.     <owner>O‘Reilly</owner>  
  15. </books>  



下面我們使用dom4j的xPath來解析: 

Java代碼  
  1. segment of ParseXML.java:  
  2.   
  3.     public void parseBooks(){  
  4.          
  5.         SAXReader reader = new SAXReader();  
  6.         try {  
  7.             Document doc = reader.read("books.xml");  
  8.             Node root = doc.selectSingleNode("/books");  
  9.             List list = root.selectNodes("book[@url=‘dom4j.com‘]");  
  10.              
  11.             for(Object o:list){  
  12.                  
  13.                 Element e = (Element) o;  
  14.                 String show=e.attributeValue("show");  
  15.                 System.out.println("show = " + show);  
  16.             }  
  17.             
  18.         } catch (Exception e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.     }  



Document doc = reader.read("books.xml");的意思是載入XML文檔,此是可以用doc.asXML()來查看,它將列印整個xml文檔。 

Node root = doc.selectSingleNode("/books");是讀取剛才載入的xml文檔內的books節點下的所有內容,對於本例也是整個xml文檔。 
當然我們也可以載入/books下的某一個節點,如:book節點 
Node root = doc.selectSingleNode("/books/book"); 
或:Node root = doc.selectSingleNode("/books/*"); 
注意:如果有多個book節點,它只會讀取第一個 
root.asXML()將列印: 
<book show="yes" url="lucene.net"> 
        <title id="456">Lucene Studing</title> 
</book> 

既然載入了這麼多,那我怎麼精確的得到我想要的節點呢,別急,看下面: 
List list = root.selectNodes("book[@url=‘dom4j.com‘]"); 
它的意思就是讀取books節點下的book節點,且book的節點的url屬性為dom4j.com 
為什麼使用list來接收呢,如果有兩個book節點,且它們的url屬性都為dom4j.com,此時就封閉到list裡了。 

如果想讀取books下的所有book節點,可以這樣: 
List list = root.selectNodes("book"); 

如果想讀取books節點下的book節點下的title節點,可以這樣: 
List list2 = root.selectNodes("book[@url=‘dom4j.com‘]/title[@id=‘123‘]"); 

注意:selectNodes()參數的格式: 
節點名[@屬性名稱=‘屬性值‘],如:book[@url=‘dom4j.com‘] 
如果有多個節點,用“/”分開,如:book[@url=‘dom4j.com‘]/title[@id=‘123‘] 

最近就是讀取封閉在List裡的內容了,可以用Node來讀取,也可以用Element來轉換。 
attributeValue("屬性")是讀取該節點的屬性值 
getText()是讀取節點的的內容。 
                                              以上傳自。。。。sorry不記得了 
要注意的是。在dom4j使用selectNodes等操作時要加上另一個包jaxen-1.1.1.jar 
帶命名空間的XML 
在XML根節點出現<outputdatas xmlns="XML"> 
或<root xmlns="www.xxx.com"> xmlns等於的就是命名空間了 
因為dom4j不能識別帶命名空間的節點,所以在讀取帶命名空間的XML時,要在每個節點前加上命名空間,方法如下例子: 

Java代碼  
  1. Map nsMap = null;  
  2. @SuppressWarnings("unchecked")  
  3. public void readXml(String xml) throws DocumentException{  
  4.     Document doc = DocumentHelper.parseText(xml);  
  5.     nsMap = new HashMap();  
  6.       
  7.     String defaultNamespace = doc.getRootElement().getNamespaceURI();  
  8.     nsMap.put("default", defaultNamespace);  
  9.      //建立解析路徑,就是在普通的解析路徑前加上map裡的key值
  10.     XPath x = doc.createXPath("//default:outputdatas/default:results/"  
  11.             + "default:result[@set_id=‘201‘]"  
  12.             + "/default:row/default:col[@param_id=‘201001‘]");  
  13.     x.setNamespaceURIs(nsMap);  
  14.       
  15.     List<Node> nodes = x.selectNodes(doc);  
  16.     Node node = x.selectSingleNode(doc);  
  17. }  


相信聰明的你。。一看就明白啦。。就不用注釋啦

 

轉自 http://lovell.iteye.com/blog/625662

帶命名空間的XML的dom4j應用<轉>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.