Подтвердить что ты не робот

Исключить некоторые элементы из выбора в XPath

Я знаю, что это простой вопрос, но я не могу понять. Рассмотрим следующий простой XML-документ:

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

Какой лучший способ выбрать узлы <b> через <e> с помощью XPath?

Я ищу что-то вроде

/root/*[not(a)]

(что не делает трюк)

4b9b3361

Ответ 1

/root/*[not(self::a)]

Ответ 2

Отвечая на добавление в XPath 2.0, вы можете использовать except:

/root/(* except a)

Для XPath 1.0 Томалак указал, что это стандартный способ сделать это:

/root/*[not(self::a)]
Кстати, если кто-то приземляется здесь, пытаясь использовать это в XSLT 2.0 в атрибуте xsl:template/@match, это не сработает, потому что @match принимает шаблоны, которые хотя и выглядят как выражения XPath, не являются выражениями XPath. Решение для XPath 1.0 будет работать в этом случае.

Ответ 3

Я понимаю, что это старый вопрос, но недавно я столкнулся с подобной проблемой и использовал следующий xpath для его решения:

/root/*[not(name()='a')]

Ответ 4

Вы пробовали:

/корень/б |/корень/с | корень/д |/корень/е