Как выбрать узлы, которые НЕ имеют определенного дочернего узла? - PullRequest
6 голосов
/ 11 октября 2010

Довольно простая проблема ... Фрагмент XML:

<bean id='Juicer'>
    <property name="electric">
        <value>false</value>
    </property>
</bean>

<bean id='Oven'>
    <property name="electric">
        <value>true</value>
    </property>
    <property name="wattage">
        <value>1000</value>
    </property>
</bean>

Я пытаюсь написать запрос xpath, который выберет все bean s, которые не имеют <property name="wattage">.

Я не могу понять, как сказать "бобы, не имеющие этого ребенка" в xpath.

Обратите внимание, что я не могу полагаться на свойство "electric", чтобы оно было ложным каждый раз, когда "wattage" отсутствует. (также этот пример немного надуманный).

Спасибо:)

Ответы [ 4 ]

6 голосов
/ 11 октября 2010

Хорошо, после небольшого раскопок я понял:

//bean[not (property[@name='wattage'])]

Действительно просто: P

4 голосов
/ 11 октября 2010

Попробуйте

//bean[not(property[@name='wattage'])]
2 голосов
/ 11 октября 2010

В случае, если текущий узел является родительским элементом элементов bean, одно выражение XPath, которое выбирает требуемые элементы, будет :

bean[not(property/@name = 'wattage')]

Это, вероятно, самое простое такое выражение (имеет только один предикат).

Это выражение, переведенное на английский язык, говорит:

Выбрать все bean дочерние узлы текущего узла, для которых атрибут name ни одного из их property дочерних элементов не является строкой "wattage".

0 голосов
/ 31 июля 2014
//bean[not(@name = 'wattage')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...