相對路徑與絕對路徑:
如果"/"處在XPath表達式開頭則表示文檔根元素,(表達式中間作為分隔符用以分割每一個步進表達式)如:/messages/message/subject是一種絕對路徑表示法,它表明是從文檔根開始查找節(jié)點。假設當前節(jié)點是在第一個message節(jié)點【/messages/message[1]】,則路徑表達式subject(路徑前沒有"/")這種表示法稱為相對路徑,表明從當前節(jié)點開始查找。具體請見下面所述的"表達式上下文"。
表達式上下文(Context):
上下文其實表示一種環(huán)境。以明確當前XPath路徑表達式處在什么樣的環(huán)境下執(zhí)行。例如同樣一個路徑表達式處在對根節(jié)點操作的環(huán)境和處在對某一個特定子節(jié)點操作的環(huán)境下執(zhí)行所獲得的結(jié)果可能是完全不一樣的。也就是說XPath路徑表達式計算結(jié)果取決于它所處的上下文。
XPath上下文基本有以下幾種:
- 當前節(jié)點(./):
如./sender表示選擇當前節(jié)點下的sender節(jié)點集合(等同于下面所講的"特定元素",如:sender)
- 父節(jié)點(../):
如../sender表示選擇當前節(jié)點的父節(jié)點下的sender節(jié)點集合
- 根元素(/):
如/messages表示選擇從文檔根節(jié)點下的messages節(jié)點集合.
- 根節(jié)點(/*):
這里的*是代表所有節(jié)點,但是根元素只有一個,所以這里表示根節(jié)點。/*的返回結(jié)果和/messages返回的結(jié)果一樣都是messages節(jié)點。
- 遞歸下降(//):
如當前上下文是messages節(jié)點。則//sender將返回以下結(jié)果: /messages//sender : <sender>gkt1980@gmail.com</sender> <sender>111@gmail.com</sender> <sender>333@gmail.com</sender>
/messages/message[1]//sender: <sender>gkt1980@gmail.com</sender> <sender>111@gmail.com</sender>
我們可以看出XPath表達式返回的結(jié)果是:從當前節(jié)點開始遞歸步進搜索當前節(jié)點下的所有子節(jié)點找到滿足條件的節(jié)點集。
- 特定元素
如sender:表示選擇當前節(jié)點下的sender節(jié)點集合,等同于(./sender)
注意:在執(zhí)行XPath時一定要注意上下文。即當前是在哪個節(jié)點下執(zhí)行XPath表達式。這在XMLDOM中很重要。如:在XMLDOM中的selectNodes,selectSingleNode方法的參數(shù)都是一個XPath表達式,此時這個XPath表達式的執(zhí)行上下文就是調(diào)用這個方法的節(jié)點及它所在的環(huán)境。更多信息請參見:http://www.w3.org/TR/xpath20/
謂詞(篩選表達式)及軸的概念:
XPath的謂詞即篩選表達式,類似于SQL的where子句.
軸名稱 |
結(jié)果 |
ancestor |
選取當前節(jié)點的所有先輩(父、祖父等) |
ancestor-or-self |
選取當前節(jié)點的所有先輩(父、祖父等)以及當前節(jié)點本身 |
attribute |
選取當前節(jié)點的所有屬性 |
child |
選取當前節(jié)點的所有子元素。 |
descendant |
選取當前節(jié)點的所有后代元素(子、孫等)。 |
descendant-or-self |
選取當前節(jié)點的所有后代元素(子、孫等)以及當前節(jié)點本身。 |
following |
選取文檔中當前節(jié)點的結(jié)束標簽之后的所有節(jié)點。 |
namespace |
選取當前節(jié)點的所有命名空間節(jié)點 |
parent |
選取當前節(jié)點的父節(jié)點。 |
preceding |
直到所有這個節(jié)點的父輩節(jié)點,順序選擇每個父輩節(jié)點前的所有同級節(jié)點 |
preceding-sibling |
選取當前節(jié)點之前的所有同級節(jié)點。 |
self |
選取當前節(jié)點。 |
出處:亂碼
責任編輯:bluehearts
上一頁 XPath詳解,總結(jié) [1] 下一頁 XPath詳解,總結(jié) [3]
◎進入論壇網(wǎng)絡編程版塊參加討論
|