Моя проблема: мне нужно проверить атрибут "attributeToBeTested" для "testElement". «testElement» является единственным потомком «test». Одно условие: этот элемент «test» должен быть потомком «toto», а не потомком «tata» или «titi».
Итак, я написал свой тест как:
//toto/descendant::test/descendant::testElement[attribute::attributeToBeTested != "Z"] and //test[not(ancestor::tata)] and //test[not(ancestor::titi)]
Что я думаю, я написал: дать мне все элементы «test», потомок «toto», где «attributeToBeTested» элемента «testElement» не установлен в «Z» И не имеет «tata» или "Тити" как предок.
Но, видимо, этот тест неправильный, и это сводит меня с ума!
Вот пример 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>
Должен появиться только один: тот, что находится внутри «toto», не в «tata» и не в «titi», а с атрибутом «Z»