Dom4J解析技術


    前面的話 


   本文主要講解有關Dom4j技術和xpath配合下的優化!

    目錄:

   為什么需要Dom4J

   DOM4J怎么用

   xpath怎么配合DOM4J 


 

      一  為什么需要Dom4J

                一門技術出現必定是有原因的,一來是解決某方面技術問題,再者可能是優化性能。

             xmlDom 簡單方便,可以將xml文檔以"DOM樹"的形式裝進內存,節點對象操作元素。但xml數據量較大時,消耗內存也大。sax訪問元素方便,不能對元素crud。都是有明顯缺點的。

            Dom4j的出現,正好優化了xml解析。

               Dom4j和xmlDom 從操作上看很相似,可以說只是對應的API不一樣。

 

            值得注意的是:

            DOM4J不是sun公司自己的產品,所以沒有提供服務的jar包,我們可以自己下載DOM4J-API包,里面有API(index-html),jar包等。

    


 

     

      二   DOM4J怎么用

             准備好示例xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <class> 
 4   <stu id="SP001"> 
 5     <name>小劉</name>  
 6     <age>12</age>  
 7     <Math>100</Math>  
 8     <English>90</English> 
 9   </stu>  
10   <stu id="sp002"> 
11     <name>小明</name>  
12     <age>12</age>  
13     <Math>98</Math>  
14     <English>90</English> 
15   </stu> 
16    <stu id="sp003"> 
17     <name>小張</name>  
18     <age>12</age>  
19     <Math>83</Math>  
20     <English>91</English> 
21   </stu> 
22 </class>

 (1)訪問元素

 Element e= document.getRootElement().Element('stu');
 Element nameNode= (Element) e.elements("name").get(0); //等價於e.Element('name'); 
System.out.println( nameNode.getText());//小明

 

 (2)插入元素

 Element stuEle=DocumentHelper.createElement("stu"); 
 stuEle.addAttribute("id", "sp003"); //添加屬性(id)  
 Element nameEle=DocumentHelper.createElement("name");
 nameEle.setText("宋江");
 Element ageEle=DocumentHelper.createElement("age");
 ageEle.setText("11");
 Element MathEle=DocumentHelper.createElement("Math");
 MathEle.setText("100");
//將元素掛到stu上
stuEle.add(nameEle);
stuEle.add(ageEle);
stuEle.add(MathEle);
//刷新,這很重要。

 

 (3)修改

 (4)刪除

    FIND:訪問屬性時: node.Elements('NodeName');  里面的元素只能是node的直接子節點,不可以是孫子(包括以后)。也不能根據id,name屬性來訪問元素。

 

     那么為提高查詢效率,需要借助xpath;

 


 

三:xpath怎么配合DOM4J 

  (1)什么是xpath

    xpath操作xml有點像sql語言查詢數據庫的效果,簡單的說,xpath是一種查詢格式。

   示例xml

<?xml version="1.0" encoding="UTF-8"?>
<AAA>
    <BBB id="sp001">B1</BBB>
    <BBB id="sp002" name="Bbb">
        <CCC>C1</CCC>
        <AAA>
            <BBB>B2</BBB>
        </AAA>
        <BBB>B3</BBB>
    </BBB>
    
</AAA>

  看下面xpath配合DOM4j------注意xpath不單獨使用

 

        List list=doc.selectNodes("/AAA/BBB");    //  "/AAA/BBB"就是xpath格式
     	System.out.println(list.size()); //2;
         
      	 //(1)xpath最經典的用法一
      	  	Element list1= (Element)doc.selectSingleNode("/AAA/BBB[1]");
		// 拿到屬性和Text
	          System.out.println("id||"+list1.attributeValue("id"));
                System.out.println("TextContent||"+list1.getText());


         // (2)經典用法二
      	 //通過id,name屬性選出元素,相等於getElementById("ID");getElementsByTagName()
	  //取出id=‘sp001’的BBB元素;
      	  Element node= (Element)(doc.selectNodes("//BBB[@id='sp001']").get(0));
      	  System.out.println(node.getText()); //B1;
      	  //取出name屬性為"Bbb"的BBB元素
      	  Element n= (Element) doc.selectSingleNode("//BBB[@name='Bbb'][1]");
      	  System.out.println(n.attributeCount()); //2 
      	

  

    xpath細節:

    (1) "/AAA/BBB"-----AAA下的BBB集合(只是子節點), /有點路徑的意思。

       再者:"/AAA/BBB[1]"----就是具體指第1個BBB元素(這里的1不是index=0開始的,就是實際上的1).

    (2) "//AAA"-----指的是xml中全部AAA元素;

        比如:"//AAA/BBB"---父元素是AAA的全部BBB元素集合(List)

    (3) "//BBB[@id='sp001']"-----取出id=‘sp001’的BBB元素集合(List)

         "//BBB[@name="Bbb"]"-----取出name="Bbb"的元素集合(List)

         "//BBB[@id='sp001'][1]''----取出第1個元素

    find:  通過xpath的修飾,DOM4J的查詢功能就很強大了。適用於大多數情況,一般解析xml文檔都是使用它。

  

   

     

 

    

   

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM