一本短期和简单的XPath 1.0表达式:
//*[not(../*/*)]
当评估aga INST提供的XML文档:
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name></Name>
<Child>
<Type>
<ID></ID>
<Name>FIND ME</Name>
</Type>
</Child>
</Type>
</Child>
</Type>
</Child>
</Type>
</Child>
</Type>
选择这两个元件:
<ID/>
<Name>FIND ME</Name>
因此,在产生所需的结果的情况下,一个XPath表达式是:
//*[not(../*/*)]/Name
二,通用的XPath 1.0表达式,选择具有最大深度的元素时,已知的最大深度不小于给定数量更大:
//*[count(ancestor::*) >= 9]
|
//*[not(//*[count(ancestor::*) >= 9])]
[count(ancestor::*) = 8]
|
//*[not(//*[count(ancestor::*) >= 8])]
[count(ancestor::*) = 7]
|
//*[not(//*[count(ancestor::*) >= 7])]
[count(ancestor::*) = 6]
|
//*[not(//*[count(ancestor::*) >= 6])]
[count(ancestor::*) = 5]
|
//*[not(//*[count(ancestor::*) >= 5])]
[count(ancestor::*) = 4]
|
//*[not(//*[count(ancestor::*) >= 4])]
[count(ancestor::*) = 3]
|
//*[not(//*[count(ancestor::*) >= 3])]
[count(ancestor::*) = 2]
|
//*[not(//*[count(ancestor::*) >= 2])]
[count(ancestor::*) = 1]
|
/*[not(//*[count(ancestor::*) >= 1])]
虽然这似乎是一个很长的和笨重,通常XML文档不超过4-5级深度,并且这种表达实际上是实际的。
三,通用的XPath 2.0解决方案:
//*[not(*) and count(ancestor::*) = max(//*/count(ancestor::*))]
你可能想看看这个问题:http://stackoverflow.com/questions/11135620/how-to-get-the-most-deeply-nested-element-nodes -using-xpath-implementation-wit – koopajah
可能的重复[你如何找到最深的节点(步骤) - Xpath-php-xml-](http://stackoverflow.com/questions/9890097/how-do-you- find-the-deepest-node-steps-xpath-php-xml) –
是的,它与链接中的帖子相同。谢谢! –