1. 程式人生 > >dom4j之xpath解析xml

dom4j之xpath解析xml

Xpath解析

Xpath是xml文件中元素的唯一路徑,通過該路徑能找到一個或多個Element,與html的xpath有類似的存在意義。dom4j中可以通過getUniquePath()獲取當前元素的Xpath。

# dom4j中有三個方法可以用於xpath查詢,dom4j-1.6.1,依賴xml-apis-1.0.b2.jar和jaxen-1.1.4.jar
List<Element> list1 = (List<Element>) root.selectNodes("/trans/snd/field");
List<Element> list2 = (List
<Element>) root.selectObject("/trans/snd/field"); Element list3 = (Element) root.selectSingleNode("/trans/snd/field[2]"); // index從1開始
Xpath規則(以下**中的元素代表目標元素)
1、選擇根元素AAA: /AAA
**<AAA>**
    <BBB/> 
    <CCC/> 
    <BBB/> 
    <BBB/> 
    <DDD> 
         <BBB/>
</DDD> <CCC/> **</AAA>**
2、選擇AAA的所有CCC子元素: /AAA/CCC
<AAA> 
     <BBB/> 
     **<CCC/>** 
     <BBB/> 
     <DDD> 
          <BBB/> 
     </DDD> 
     **<CCC/>** 
</AAA>   
3、選擇AAA的子元素DDD的所有子元素: /AAA/DDD/BBB
<AAA> 
     <BBB
/>
<CCC/> <BBB/> <BBB/> <DDD> **<BBB/>** </DDD> <CCC/> </AAA>
4、根節點下所有BBB元素: //BBB
<AAA>  
     **<BBB/>**
     <CCC> 
          **<BBB/>**
     </CCC>
     <DDD> 
          **<BBB/>** 
     </DDD>
</AAA>
5、元素下的所有子元素: /CCC/*
<AAA> 
     <CCC> 
          **<DDD>** 
               <BBB/> 
               <BBB/> 
               <EEE/> 
               <FFF/> 
          **</DDD>** 
     </CCC>
</AAA>  
6、若目標元素是列表,選中第二個元素(從1開始): /AAA[2]
<AAA>
    </BBB>
    **</CCC>**
    </DDD>
</AAA>

選中最後一個:/AAA[last()]

7、@選中有特定屬性的元素: /AAA/CCC[@name]
<AAA>
    </BBB>
    **<CCC name="attr">
    </CCC>**
    </DDD>
</AAA>

取反: /AAA/CCC[not(@name)]

8、@選中指定屬性值的元素: /AAA/CCC[@name=’attr’]
<AAA>
    </BBB>
    **<CCC name="attr">
    </CCC>**
    </DDD>
</AAA>