Может ли XPath совпадать по частям имени элемента? - PullRequest
31 голосов
/ 05 сентября 2008

Я хочу сделать это:

// * фу

, который возвращает все узлы, имя которых заканчивается на fu , например <tarfu /> и <snafu />, но не <fubar />

Ответы [ 3 ]

43 голосов
/ 14 ноября 2008

Этот ответ предназначен для XPath 1.0 , где нет эквивалента стандартной функции XPath 2.0, завершающейся с () .

Следующее выражение XPath 1.0 выбирает все элементы в документе xml, имена которых заканчиваются строкой "fu":

//*[substring(name(),string-length(name())-1) = 'fu']
36 голосов
/ 05 сентября 2008

сделать что-то вроде:

//*[ends-with(name(), 'fu')]

Хороший справочник по XPath: W3Schools .

2 голосов
/ 08 июня 2017

Я боролся с ответом Дмитрия Новатчева, он не вернет спички. Я знал, что у вашего XPath должен быть раздел, говорящий о том, что "fu" имеет длину 2.

Рекомендуется иметь длину строки ('fu'), чтобы определить, что подстроке.

Для тех, кто не может получить результаты с его ответом и им нужно решение с xpath 1.0:

//*[substring(name(), string-length(name()) - string-length('fu') +1) = 'fu']

Находит совпадения элементов, заканчивающихся на "fu"

или

//*[substring(name(), string-length(name()) - string-length('Position') +1) = 'Position']

Находит совпадения с элементами, заканчивающимися на "Position"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...