我看到一个非常奇怪的行为,当试图限制通过将祖先::* 应用到一个元素给出的结果时,我总是得到一个额外的祖先,尽管被谓词明确排除。
这里的代码:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<level_a>
<level_b>
<level_c>
<level_d>
<level_e/>
</level_d>
</level_c>
</level_b>
</level_a>
<level_b>
<level_c>
<level_d>
<level_d>
<level_e/>
</level_d>
</level_d>
</level_c>
</level_b>
</root>
XPath:
(//level_d[not(level_d)])[last()]/ancestor::*[level_c|level_b]
所以基本上我选择了没有嵌套另一个level_d元素的level_d元素,获取最后一个元素并尝试让所有祖先元素达到元素level_b。但是我使用 Altova XMLSpy 2011 看到的结果是:
- level_a
- level_b
我不太明白为什么我会得到这个结果,以及如何改进我的 xpath 以有效地将祖先限制到level_b(即 level_c 和 level_b)。
非常感谢任何提示!
问候
Vlax