我的问题:我需要检查属性" attributeToBeTested" " testElement"。 " testElement"是" test"的唯一孩子。一个条件:这个"测试"元素必须是" toto"的孩子。而不是" tata"或" titi"。
所以我把我的测试写成:
//toto/descendant::test/descendant::testElement[attribute::attributeToBeTested != "Z"] and //test[not(ancestor::tata)] and //test[not(ancestor::titi)]
我想我写的是:给我所有"测试"元素," toto"的子项,其中"属性ToBeTested" " testElement"元素未设置为" Z"并且没有" tata"或" titi"作为祖先。
但显然,这个测试是错误的,这让我发疯了!
以下是XML示例:
<tata>
....
<test>
<testElement attributeTobeTested="Z"/>
</test>
</tata>
<toto>
....
<test>
<testElement attributeTobeTested="H"/>
</test>
....
<test>
<testElement attributeTobeTested="Z"/> <---- This one should pop up
</test>
</toto>
<toto>
....
<titi>
<test>
<testElement attributeTobeTested="Z"/>
</test>
</titi>
</toto>
只会弹出一个:&#34; toto&#34;不在&#34; tata&#34;而不是&#34; titi&#34;并使用&#34; Z&#34;
的属性答案 0 :(得分:1)
尝试以下XPath:
//toto//test[not(ancestor::*[name()=("titi", "tata")])]/testElement[@attributeTobeTested="Z"]
它应该返回您所需的testElement
节点