2009-11-09 79 views
3

我試過在線閱讀各種教程,但我無法取得任何進展,解決這個問題很容易描述,但我無法想象的解決方案。XPATH/PHP麻煩與last()

下面是一些示例XML:

<AAA> 
    <BBB> 
     <CCC>1</CCC> 
     <CCC>2</CCC> 
    </BBB> 
    <BBB> 
     <CCC>3</CCC> 
     <CCC>4</CCC> 
    </BBB> 
</AAA> 

我希望能夠選擇在每個容器中的最後<CCC> ...換句話說,我希望能拉<CCC>2</CCC><CCC>4</CCC>。我已經嘗試了無數的表達來達到這個目的,但我能做的最好的事情是獲得最後的<CCC>(其中包含4)。

看起來像// BBB/CCC [last()]應該可以工作,但它顯然會選擇所有BBB兒童的CCC(總共4個),然後才處理last()謂詞 - 因此只返回單個元素<CCC>4</CCC>

這讓我瘋狂!任何人都可以看到燈光?非常感謝!!

回答

5
/AAA/BBB/CCC[position() = last()] 

//BBB/CCC[position() = last()]//CCC[position() = last()]也似乎工作。我在這裏找到了一個很酷的網站用於xpath測試:http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm

+0

不錯!感謝您分享網站鏈接:) – 2009-11-09 06:45:46

+2

較短(但相當於):'/ AAA/BBB/CCC [last()]'或'CCC [last()]'。注意:只要有可能,我會避免使用'//'速記,因爲它比較昂貴。甚至像'/ */*/CCC [last()]'比'//'更好。 – Tomalak 2009-11-09 13:21:05