如果我有一個具有多個元素的文檔具有相同的名稱會怎麼樣?例如,我將如何檢索第二個元素?如何識別XPath中具有相同名稱的多個元素?
我期望像// elem [@ name ='same'] [2]這樣的工作。
此外,我將如何找到最後一個元素XPath中的第二位元素的可變數量的同名
如果我有一個具有多個元素的文檔具有相同的名稱會怎麼樣?例如,我將如何檢索第二個元素?如何識別XPath中具有相同名稱的多個元素?
我期望像// elem [@ name ='same'] [2]這樣的工作。
此外,我將如何找到最後一個元素XPath中的第二位元素的可變數量的同名
[ ]
具有更高的優先級比//(和「//」,其實只是一個縮寫,不是運營商)。之所以如此,是因爲根據XPath 1.0 Spec,
「//是短期的/後代或自身::節點()/」
後來:
「注:該位置路徑//第1不等同於位置路徑/後代:第1。後者選擇第一個後代para元素;前者選擇所有後代para元素,它們是父母的第一個para孩子。
因此,XPath表達式:
//element[@name='same'][2]
指:
選擇文檔中的任何元件,其被命名爲 「元件」,具有屬性 「名稱」 與價值「相同」,這個元素是其父母的第二個這樣的孩子。
你想要的是:
(//element[@name='same'])[2]
注意括號,其覆蓋的[]更高的優先級。
類似地,最後但一個這樣的節點由以下XPath表達式選自:
(//element[@name='same'])[last()-1]
最後,一個必要的警告:使用的「 //「縮寫非常昂貴,因爲它會導致整個(子)樹遍歷。無論何時文檔的結構已知,建議使用更具體的構造(位置路徑)。
+1,謝謝你爲什麼`/ para [1]`,也就是`/ descendant-or-self :: node()/ para [1]`和/ descendant :: para [1]`。回覆:「使用」//「的縮寫非常昂貴」 - 我會說「*可能*非常昂貴,但它很大程度上取決於處理器。」例如,撒克遜人對於優化非常聰明,AFAIU通常會自動構建密鑰,以便快速製作「//」表達式。 – LarsH 2010-10-19 02:41:50