2016-01-25 4 views
0

Привет, я знаю, что это довольно просто, но я не смог найти ответ сам.Как исключить элементы из результата xpath

В этом примере:

<root> 
    <a/> 
    <b/> 
    <c/> 
    <d/> 
</root> 

Я хочу, чтобы выбрать все root детей кроме b и d.

Я написал что-то вроде этого, что не сработало.

/root/*[not(b) and not(d)] 

В результате все коренные дети: a,b,c,d. Как выбрать только a и c?

ответ

1

"Я хочу, чтобы выбрать все корневые ребенок кроме b и d"

Вашей попытки XPath пропустил self оси :

/root/*[not(self::b) and not(self::d)] 
1

Правильный XPath является /root/*[name() != 'b' and name() != 'c'], я проверил имя узла

1

Если вы используете XPath 2.0, вы можете использовать следующую команду, которая, возможно, является немного короче и легче читать, если вам необходимо обновить ваш список исключений:

/root/*[not(name() = ('b', 'c'))]

Это использует XPath 2.0 = оператор, который возвращает true, если в сравниваемых последовательностях есть одна равная пара элементов. Поэтому, если элемент name() элемента равен 'b' или 'c', сравнение true, а затем вы хотите исключить узел (отсюда not()).

Также проверьте What is the difference between name() and local-name()?, чтобы узнать, следует ли использовать name() или local-name(). В большинстве случаев то, что действительно хотят люди, это local-name().

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