Ответ 1
/root/*[not(self::a)]
Я знаю, что это простой вопрос, но я не могу понять. Рассмотрим следующий простой 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)]
(что не делает трюк)
/root/*[not(self::a)]
Отвечая на добавление в 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 будет работать в этом случае. Я понимаю, что это старый вопрос, но недавно я столкнулся с подобной проблемой и использовал следующий xpath для его решения:
/root/*[not(name()='a')]
Вы пробовали:
/корень/б |/корень/с | корень/д |/корень/е