2013-04-03 3 views
1

Хорошо, в основном я пытаюсь использовать XPath, чтобы найти соответствие «с условием». в основном, со следующим XML:Возможна xpath условное совпадение?

<stuff1> 
    <stuff2>abc</stuff2> 
</stuff1> 
<stuff3> 
    <stuff4>abc</stuff4> 
    <stuff5>true</stuff5> 
</stuff3> 
<stuff3> 
    <stuff4>abc</stuff4> 
    <stuff5>false</stuff5> 
    <stuff6>extra stuff</stuff6> 
</stuff3> 

, что я хотел бы сделать, это выбрать stuff1 том, что соответствуют stuff3, основанные на stuff2 == stuff4, но и где stuff3 имеют в «stuff5» значение ложь, но не правда.

Я знаю, что //stuff1[stuff2/text()=../stuff3/stuff4/text()] выберет мне stuff1, который соответствует stuff3, но как я могу указать, что stuff3 должен иметь значение stuff5 false? Извините, если это элементарное или ответили в другом месте, случайный поиск не показал легко ответа. Спасибо.

ответ

2

Вы почти там, если вы хотите, чтобы соответствовать только stuff3 элементы с stuff5 значением ложной, вы можете сделать это, добавив предикат [stuff5/text()="false"] к stuff3 матча.

Полный XPath должен выглядеть следующим образом:

//stuff1[stuff2/text()=../stuff3[stuff5/text()="false"]/stuff4/text()]

+0

удивительным спасибо. Я также задаюсь вопросом, можно ли сказать ... включить сопоставленные stuff3 в выходные данные узла, но если вы не знаете из рук, не беспокойтесь об этом. – rogerdpack

+1

@rogerdpack, не могли бы вы перефразировать? Я не понимаю, какие именно элементы вы хотите выбрать. –

+0

ОК, я обновил исходный вопрос, в основном, он «дал xpath в этом ответе, как я мог бы снова набрать лишний материал. Если это имеет смысл так или иначе :) – rogerdpack

Смежные вопросы