這篇文章主要為大家展示了“XML中XPATH語法的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“XML中XPATH語法的示例分析”這篇文章吧。
為什么需要xpath?
在使用dom4j的時候,我們不能跨層獲取某一個元素,必須一層一層去獲取,這就非常麻煩。
所以為了我們更方便地訪問某個節點,我們可以使用xpath技術,它可以讓我們非常方便地讀取到指定節點。
xpath通常結合dom4j配合使用,而且如果要使用xpath,則需要引入一個新的包jaxen-1.1-beta-6.jar
xpath的基礎語法有以下幾點:
1.基本的xpath語法類似于在一個文件系統中定位文件,如果路徑以斜線/
開始,那么該路徑就表示到一個元素的絕對路徑.
(1)/AAA
,它表示選擇根元素AAA
<AAA>這里 <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> <DDD/> <CCC/><AAA/>這里
(2)/AAA/CCC
,表示選擇AAA的所有CCC子元素
<AAA> <BBB/> <CCC/>這里 <BBB/> <BBB/> <DDD> <BBB/> <DDD/> <CCC/>這里<AAA/>
(3)/AAA/DDD/BBB
,表示選擇AAA的子元素DDD的所有BBB子元素
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/>這里 <DDD/> <CCC/><AAA/>
那么怎么在dom4j中運用xpath呢?其實很簡單:
//1.得到SAXReader解析器SAXReader saxReader = new SAXReader(); //2.指定去解析哪個文件Document document = saxReader.read(new File(path)); //3.可以使用xpath隨心讀取// document.selectNodes(args)返回多個元素 // document.selectSingleNode(args)返回單個元素List nodes = document.selectNodes("/AAA/BBB");
通過dom4j得到document對象后,可以使用document的selectNodes(args)
方法,這個方法會根據你寫的xpath路徑返回一個List
,余下的操作就和dom4j類似了。
同時它也有一個selectSingleNode(args)
方法,用于返回一個單個的Node。
下面繼續介紹其他的xpath語法:
2.如果路徑以雙斜線//
開頭,則表示文檔中所有滿足雙斜線//
之后規則的元素(無論層級關系)
(1)//BBB
,它表示選擇所有BBB元素
<AAA> <BBB/>這里 <CCC/> <BBB/>這里 <DDD> <BBB/>這里 </DDD> <CCC> <DDD> <BBB/>這里 <BBB/>這里 </DDD> </CCC></AAA>
(2)//DDD/BBB
,表示所有父元素是DDD的BBB元素
<AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/>這里 </DDD> <CCC> <DDD> <BBB/>這里 <BBB/>這里 </DDD> </CCC></AAA>
3.星號*
表示選擇所有由星號之前路徑所定位的元素
(1)/AAA/CCC/DDD/*
,它表示選擇所有路徑依附于/AAA/CCC/DDD的元素:
<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/>這里 <BBB/>這里 <EEE/>這里 <FFF/>這里 </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC></AAA>
(2)/*/*/*/BBB
,它表示所有的有3個祖先元素的BBB元素
<AAA> <XXX> <DDD> <BBB/>這里 <BBB/>這里 <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/>這里 <BBB/>這里 <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB>這里 <BBB> <BBB/> </BBB> </BBB> </CCC></AAA>
(3)//*
,它表示選擇所有的元素
4.方括號里的表達式可以進一步地指定元素,其中數字表示元素在選擇集里的位置,而last()函數則表示選擇集中的最后一個元素。特別要注意的是這里的下標是從1開始的,而不是0!
(1)/AAA/BBB[1]
,它表示選擇AAA的第一個BBB子元素
<AAA> <BBB/>這個 <BBB/> <BBB/> <BBB/></AAA>
(2)/AAA/BBB[last()]
,表示選擇AAA的最后一個BBB元素
<AAA> <BBB/> <BBB/> <BBB/> <BBB/>這個</AAA>
5.對屬性的操作
(1)//@id
,選擇所有的id屬性,注意:是把所有的id屬性當做節點返回,而不是返回有id屬性的節點。
<AAA> <BBB id="b1"/>返回這里的id屬性節點 <BBB id="b2"/>也返回這里的id屬性節點 <BBB name="bbb"/> <BBB/></AAA>
(2)//BBB[@id]
,選擇所有有id屬性的BBB節點
<AAA> <BBB id="b1"/>返回這個BBB節點 <BBB id="b2"/>也返回這個BBB節點 <BBB name="bbb"/> <BBB/></AAA>
(3)//BBB[@name]
,選擇所有有name屬性的BBB節點
<AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/>返回這個BBB節點 <BBB/></AAA>
(4)//BBB[@*]
,選擇所有有屬性的BBB節點
<AAA> <BBB id="b1"/>返回這個BBB節點 <BBB id="b2"/>返回這個BBB節點 <BBB name="bbb"/>返回這個BBB節點 <BBB/></AAA>
(5)//BBB[not(@*)]
,選擇所有沒有屬性的BBB節點
<AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/> <BBB/>這個</AAA>
6.屬性的值可以被用來作為選擇的準則
(1)//BBB[@id='b1']
,選擇含有屬性id且其值為’b1’的BBB元素
<AAA> <BBB id="b1"/>這個 <BBB name="bbb"/> <BBB name="bbb"/></AAA>
7.count()
函數可以計數所選元素的個數
(1)//*[count(BBB)=2]
,選擇含有2個BBB子元素的元素
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD>返回這個元素 <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE></AAA>
(2)//*[count(*)=2]
,選擇含有2個子元素的元素
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD>返回這個元素 <BBB/> <BBB/> </DDD> <EEE>也返回這個元素 <CCC/> <DDD/> </EEE></AAA>
還有很多其他的語法,包括很多函數的應用,用的不多,這里不做介紹
另外,上述介紹的幾點語法可以任意組合,比如下述的xml文檔:
<AAA> <BBB id="b1"> <CCC> <KKK>k1</KKK> </CCC> <CCC> <KKK>k2</KKK>這個 </CCC> </BBB> <BBB id="b2"/> <BBB name="bbb"/></AAA>
假如我們現在要找AAA元素下面的第1個BBB子元素下面的第2CCC子元素的KKK子元素,則xpath路徑應該這么寫: /AAA/BBB[1]/CCC[2]/KKK
為什么需要xpath?
在使用dom4j的時候,我們不能跨層獲取某一個元素,必須一層一層去獲取,這就非常麻煩。
所以為了我們更方便地訪問某個節點,我們可以使用xpath技術,它可以讓我們非常方便地讀取到指定節點。
xpath通常結合dom4j配合使用,而且如果要使用xpath,則需要引入一個新的包jaxen-1.1-beta-6.jar
xpath的基礎語法有以下幾點:
1.基本的xpath語法類似于在一個文件系統中定位文件,如果路徑以斜線/
開始,那么該路徑就表示到一個元素的絕對路徑.
(1)/AAA
,它表示選擇根元素AAA
<AAA>這里 <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> <DDD/> <CCC/><AAA/>這里
(2)/AAA/CCC
,表示選擇AAA的所有CCC子元素
<AAA> <BBB/> <CCC/>這里 <BBB/> <BBB/> <DDD> <BBB/> <DDD/> <CCC/>這里<AAA/>
(3)/AAA/DDD/BBB
,表示選擇AAA的子元素DDD的所有BBB子元素
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/>這里 <DDD/> <CCC/><AAA/>
那么怎么在dom4j中運用xpath呢?其實很簡單:
//1.得到SAXReader解析器SAXReader saxReader = new SAXReader(); //2.指定去解析哪個文件Document document = saxReader.read(new File(path)); //3.可以使用xpath隨心讀取 // document.selectNodes(args)返回多個元素 // document.selectSingleNode(args)返回單個元素List nodes = document.selectNodes("/AAA/BBB");
通過dom4j得到document對象后,可以使用document的selectNodes(args)
方法,這個方法會根據你寫的xpath路徑返回一個List
,余下的操作就和dom4j類似了。
同時它也有一個selectSingleNode(args)
方法,用于返回一個單個的Node。
下面繼續介紹其他的xpath語法:
2.如果路徑以雙斜線//
開頭,則表示文檔中所有滿足雙斜線//
之后規則的元素(無論層級關系)
(1)//BBB
,它表示選擇所有BBB元素
<AAA> <BBB/>這里 <CCC/> <BBB/>這里 <DDD> <BBB/>這里 </DDD> <CCC> <DDD> <BBB/>這里 <BBB/>這里 </DDD> </CCC></AAA>
(2)//DDD/BBB
,表示所有父元素是DDD的BBB元素
<AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/>這里 </DDD> <CCC> <DDD> <BBB/>這里 <BBB/>這里 </DDD> </CCC></AAA>
3.星號*
表示選擇所有由星號之前路徑所定位的元素
(1)/AAA/CCC/DDD/*
,它表示選擇所有路徑依附于/AAA/CCC/DDD的元素:
<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/>這里 <BBB/>這里 <EEE/>這里 <FFF/>這里 </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC></AAA>
(2)/*/*/*/BBB
,它表示所有的有3個祖先元素的BBB元素
<AAA> <XXX> <DDD> <BBB/>這里 <BBB/>這里 <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/>這里 <BBB/>這里 <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB>這里 <BBB> <BBB/> </BBB> </BBB> </CCC></AAA>
(3)//*
,它表示選擇所有的元素
4.方括號里的表達式可以進一步地指定元素,其中數字表示元素在選擇集里的位置,而last()函數則表示選擇集中的最后一個元素。特別要注意的是這里的下標是從1開始的,而不是0!
(1)/AAA/BBB[1]
,它表示選擇AAA的第一個BBB子元素
<AAA> <BBB/>這個 <BBB/> <BBB/> <BBB/></AAA>
(2)/AAA/BBB[last()]
,表示選擇AAA的最后一個BBB元素
<AAA> <BBB/> <BBB/> <BBB/> <BBB/>這個</AAA>
5.對屬性的操作
(1)//@id
,選擇所有的id屬性,注意:是把所有的id屬性當做節點返回,而不是返回有id屬性的節點。
<AAA> <BBB id="b1"/>返回這里的id屬性節點 <BBB id="b2"/>也返回這里的id屬性節點 <BBB name="bbb"/> <BBB/></AAA>
(2)//BBB[@id]
,選擇所有有id屬性的BBB節點
<AAA> <BBB id="b1"/>返回這個BBB節點 <BBB id="b2"/>也返回這個BBB節點 <BBB name="bbb"/> <BBB/></AAA>
(3)//BBB[@name]
,選擇所有有name屬性的BBB節點
<AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/>返回這個BBB節點 <BBB/></AAA>
(4)//BBB[@*]
,選擇所有有屬性的BBB節點
<AAA> <BBB id="b1"/>返回這個BBB節點 <BBB id="b2"/>返回這個BBB節點 <BBB name="bbb"/>返回這個BBB節點 <BBB/></AAA>
(5)//BBB[not(@*)]
,選擇所有沒有屬性的BBB節點
<AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/> <BBB/>這個</AAA>
6.屬性的值可以被用來作為選擇的準則
(1)//BBB[@id='b1']
,選擇含有屬性id且其值為’b1’的BBB元素
<AAA> <BBB id="b1"/>這個 <BBB name="bbb"/> <BBB name="bbb"/></AAA>
7.count()
函數可以計數所選元素的個數
(1)//*[count(BBB)=2]
,選擇含有2個BBB子元素的元素
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD>返回這個元素 <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE></AAA>
(2)//*[count(*)=2]
,選擇含有2個子元素的元素
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD>返回這個元素 <BBB/> <BBB/> </DDD> <EEE>也返回這個元素 <CCC/> <DDD/> </EEE></AAA>
還有很多其他的語法,包括很多函數的應用,用的不多,這里不做介紹
另外,上述介紹的幾點語法可以任意組合,比如下述的xml文檔:
<AAA> <BBB id="b1"> <CCC> <KKK>k1</KKK> </CCC> <CCC> <KKK>k2</KKK>這個 </CCC> </BBB> <BBB id="b2"/> <BBB name="bbb"/></AAA>
假如我們現在要找AAA元素下面的第1個BBB子元素下面的第2CCC子元素的KKK子元素,則xpath路徑應該這么寫: /AAA/BBB[1]/CCC[2]/KKK
以上是“XML中XPATH語法的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。