2013-05-09 20 views
1

文檔的結構混亂:關於後代軸「//」

<program> 
<projectionDay> 
    <projection/> 
    <projection/> 
</projectionDay> 
<projectionDay> 
    <projection/> 
    <projection/> 
</projectionDay> 
</program> 

我要選擇的第一個和最後投影(在整個文檔)。

這將返回它:

/descendant::projection[position() = 1 or position() = last()] 

這第一個和最後返回projectionDay

//projection[position() = 1 or position() = last()] 

內爲什麼會這樣呢?使用descendant第一個查詢

+1

'//'從當前節點中選擇所有匹配的節點。你是從''節點還是從根節點運行該xpath查詢? – themanatuf 2013-05-09 17:41:14

回答

5

獲取所有<projection/>元素,然後過濾這個結果第一和最後一個元素設置:

/descendant::projection[position() = 1 or position() = last()] 

///descendant-or-self::*/的縮寫。所以,你的第二個查詢實際上意味着

/descendant-or-self::*/projection[position() = 1 or position() = last()] 

,看起來到的所有元素(在這裏:每個<projectionDay/>,並返回第一個和最後一個<projection/>元素這個元素


要返回的第一和最後一個元素覆蓋所有<projeectionDay/> s,將謂詞前面的所有內容放在圓括號中:

(/descendant-or-self::*/projection)[position() = 1 or position() = last()] 

或縮寫:

(//projection)[position() = 1 or position() = last()]