一本短期和簡單的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) –
是的,它與鏈接中的帖子相同。謝謝! –