Выберите узел с условием на предков - PullRequest
0 голосов
/ 17 мая 2018

Моя проблема: мне нужно проверить атрибут "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»

1 Ответ

0 голосов
/ 17 мая 2018

Попробуйте ниже XPath:

//toto//test[not(ancestor::*[name()=("titi", "tata")])]/testElement[@attributeTobeTested="Z"]

Он должен вернуть вам необходимый testElement узел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...