XPath是一種用來從文檔樹中選擇節點和節點集的語言。從XPath的角度來看,共有七種節點:根節點、元素節點、屬性節點、文本節點、注釋節點、處理指令節點、名稱空間節點。
XPath是一種用來從文檔樹中選擇節點和節點集的語言。從XPath的角度來看,共有七種節點:
根節點
元素節點
屬性節點
文本節點
注釋節點
處理指令節點
名稱空間節點
CDATA部份,實體引用和文檔類型聲明不包括在內,XPath在所有這些項都並入文檔之後才起作用。根節點和根元素是不同的兩個概念,根節點包含整篇文檔,包括根元素。
本文由(http://www.jb51.net)整理發布!轉載請注明出處,謝謝!
1.匹配模式
匹配模板的通用模式
Table6.1.
模式 |
描述 |
match="E"
匹配元素E
match="*"
匹配任意元素
match="E|F"
匹配元素E和F
match="E/F"
匹配以E為父元素的元素F
match="E//F"
匹配以E為根元素的元素F
match="/"
匹配根節點
match="text()"
匹配文本節點
match="comment()"
匹配注釋節點
match="processing-instruction()"
匹配處理指令
match="node()"
匹配除屬性節點和根節點外的節點
match="id(test)"
匹配具有唯一ID test的元素
match="E[@CLASS="foo"]
匹配元素E,其類屬性為foo
match="E[F]"
匹配元素包含有F元素的E元素
2.XPath軸
XPath提供了選擇節點的機制,兩個較有用的是軸選擇和謂語選擇,軸指定上下文節點和要選擇的節點的關系。共有十三種軸,最常用的有四種,分別是子軸(child)、屬性軸(attribute)、自已(self)、雙親(parent)。
Table6.2.XPath軸描述
軸 |
描述 |
child
包含當前節點的兒子
descendent
包含當前節點的後代,後代不包含屬性(attribute)或名稱域(namespace)節點
parent
包含當前節點的父親
ancestor
包含當前節點的祖先,祖先總是包含根節點
following-sibling
包含當前節點隨後的所有節點樹,但不包含attribute或namespace節點
preceding-sibling
包含當前節點之前的所有節點樹,但不包含attribute或namespace節點
following
包含當前節點隨後的所有節點,following軸排除了當前節點的後代和attribute或namespace節點
preceding
包含當前節點之前的所有節點,following軸排除了當前節點的後代和attribute或namespace節點
attribute
包含當前節點的所有屬性
namespace
包含當前節點的所有namespace節點
self
只包含當前節點
descendent-or-self
包含當前節點和當前節點的後代
ancestor-or-self
包含當前節點和當前節點的祖先
3.謂詞
XPath表達式可以匹配多個節點,如需對匹配的節點進行進一步的篩選,可以使用謂詞。
Table6.3.選擇節點常用謂詞
謂詞 |
描述 |
select="E"
選擇是當前節點的孩子的E元素
select=""
選擇當前節點的孩子的所有元素
select="text()"
選擇當前節點的文本節點孩子
select="@name"
選擇當前節點的name屬性
select="@*"
選擇當前節點的所有屬性
select="E[1]"
選擇當前節點的孩子的第一個E元素
select="E[last()]"
選擇當前節點的孩子的最後一個E元素
select="*/E"
選擇當前節點的孫了的所有E元素
select="E//F"
選擇從當前節點的孩子的E元素派生而來的元素F
select="//"
選擇根元素
select="//E"
選擇從根節點派生而來的E元素
select="//E/F"
選擇所有是從根節點派生而來的E元素的孩子的F元素
select="."
選擇當前節點
select=".//E"
選擇從當前節點派生而來的所有E元素
select=".."
選擇當前節點的父節點
select="../@name"
選擇當前節點的父節點的name屬性
select="E[@name='foo']"
選擇所有是當前節點的孩子,並且其name屬性具有foo值的E屬性,除等號外,還可用<,>,<=,>=和!=
select="E[@foo and @bar]"
選擇所有包含foo和bar屬性的E元素
home/person/@id這種定位路徑的寫法叫簡寫定位路徑,該寫法簡潔,容易理解,是XSLT匹配模式中最常用的寫法。還有一種稱為非簡寫定位路徑的寫法,它把節點測試和軸結合在一起,如child::home/child::person/attribute::id。該寫法在實際使用中不常用,但它具有非常重要的性能因此有必要了解。
4.XPath表達式
位置路徑是XPath的一個最常用的表達式,用以標識XML文檔的節點集。除此之上,XPath表達式還可返回數字、布爾和字符串。非節點集的XPath表達式不能用於xsl:template元素的match屬性中。它們用於xsl:value-of元素的select屬性值或用於位置路徑的謂詞中。
本文由(http://www.jb51.net)整理發布!轉載請注明出處,謝謝!
每個XPath位置路徑可分為一步名多步,每步以“/”號分隔,如:
room[\@name=$root]/date[year=$year and month=$month]/meeting
上下文節點即當前正在處理的節點,也就是位置路徑定位的當前節點。上下文在XPath表達式計算前被創建,由XSLT處理器創建。處理每一步後,上下文都會改變。
位置路徑中的步可分為三部份:軸(axis)、節點測試(note test)和謂詞(predicate),它的寫法如下:
axis::note-test[predicate]
軸和節點測試之間用“::”分開,每個謂詞由括號[]括起來。
要設計好一個位置路徑,需確保在每一步選擇最少的節點,使用最嚴格的軸,用最嚴格的節點測試。避免使用謂詞,因為由軸和節點測試選擇的節點集的每個節點都會用作謂詞的上下文節點。對於位置路徑的三步,最節省的是節點測試。
XPath中的所有數字都是8個字節的IEEE754浮點雙精度類型,與java的double類型相同。可表示正無窮大、負無窮大和NaN(零除零)值。支持五種運算符,分別是加( )、減(-)、乘(*)、除(div)、取余(mod)。
XPath中的字符串是Unicode字符,用單引號或雙引號定界。可以使用=和!=對字符進行比較,也可用<,>,<=,>關系運算符,但比較的兩個字符必須是數字,否則比較結果沒有意義。
XPath中的布爾值常用於位置路徑的謂詞中,如/person[name="debian"]。布爾值還常用於xsl:if和xsl:when元素的test屬性中。如:
<xsl:template match="home">
<xsl:if test = ".='debian' or .='redhat'">
<xsl:value-of select = "." />
</xsl:if>
</xsl:template>
5.XPath函數
XPath還提供很多函數,用於表達式和謂詞。XPath函數的返回值有四種類型,分別是:
布爾值,如:true()返回ture(真),false()返回false(假),not()對布爾值取反。
數字,如:number()把任意類型轉化數字,celing()返回大於或等於參數的最小整數。
節點集,如:position()返回當有節點在上下節點列表中的位置,count()可統計節點數。
字符串,如:string()轉化任意類型為字符串,string-length()返回字符串長度。