Подстановочные знаки XPath для имени узла - PullRequest
41 голосов
/ 17 ноября 2010

Я хочу получить узел из моего XML-файла, у узла есть префикс, такой как "latest_", но это может измениться, и я стремлюсь, чтобы мой XSLT был как можно более плавным.Вот XPath, который я хочу использовать:

/data/stats/*_cost

Это должно соответствовать latest_cost, newest_cost, anything_cost, есть ли способ сделать это?

Приветствия :-)

Ответы [ 4 ]

64 голосов
/ 17 ноября 2010

Это правильное выражение XPath 1.0, которое выбирает элемент с последними 5 символами имени, равными "_cost" в любом пространстве имен.

/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']
6 голосов
/ 17 ноября 2010

Вы также можете использовать contains

например

/data/stats[contains(.,'_cost')] 
6 голосов
/ 17 ноября 2010

С XPath 1.0 вы можете использовать /data/stats/*[substring-after(name(), '_cost') = ''] шаблон.Это проверяет, заканчивается ли имя элемента суффиксом _cost.

В XPath 2.0 есть fn:ends-with(str, str), и ваше соответствующее выражение будет *[ends-with(name(), '_cost')].

4 голосов
/ 01 октября 2018

Выше не работал для меня. Мне пришлось «слегка» изменить это следующим образом:

/data/stats/*[contains(name(),'_cost')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...