XPath относительно узла - как выбрать текущий узел? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть система, которая оценивает выражения XPath (фильтры) относительно узла в документе XML. Обычно фильтр соответствует некоторому подузлу и проверяет, существует ли он. Например, ./div[contains(@class, 'soldout')] для фильтрации уже проданных продуктов.

Теперь я хочу express выражение фильтра, основанное на текущем узле. Я попробовал следующее:

.[contains(@class, 'soldout')]

Но система говорит мне, что это недопустимый XPath.

Какой правильный путь к express "текущему узлу" или "контекстному узлу"?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

К сожалению, в грамматике XPath 1.0 ошибка «.» и «..» не может сопровождаться предикатом (это было исправлено в 2.0). Оно возникает из-за правила

[4] Step ::=    AxisSpecifier NodeTest Predicate*   
                | AbbreviatedStep

(где AbbreviatedStep равно . или ..)

Так что, хотя в спецификации c говорится, что ". "эквивалентно self::node(), это не совсем верно, потому что self::node() может сопровождаться предикатом, а . не может.

1 голос
/ 17 апреля 2020

Возможно, вам нужна собственная ось. Это работает так:

путь к элементу node / self :: для оценки [предиката]

/path to the node/self::*[contains(@class, 'soldout')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...