2009-11-09 94 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