Ответ 1
Это правильное выражение XPath 1.0, которое выбирает элемент с последними 5 символами имени, равными "_cost" в любом пространстве имен.
/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']
Я хочу захватить node из моего XML файла, node имеет префикс, такой как "latest_", но это может измениться, и я заинтересован в том, чтобы мой XSLT был как можно более жидким. Здесь XPath я хочу использовать:
/data/stats/*_cost
Это должно соответствовать latest_cost
, newest_cost
, anything_cost
, есть ли способ сделать это?
Приветствия: -)
Это правильное выражение XPath 1.0, которое выбирает элемент с последними 5 символами имени, равными "_cost" в любом пространстве имен.
/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']
Вы также можете использовать contains
e.g
/data/stats[contains(.,'_cost')]
С XPath 1.0 вы можете использовать шаблон /data/stats/*[substring-after(name(), '_cost') = '']
. Это проверяет, заканчивается ли имя элемента суффиксом _cost
.
В XPath 2.0 есть fn:ends-with(str, str)
, и ваше соответствующее выражение будет *[ends-with(name(), '_cost')]
.
Выше не работал для меня. Мне пришлось "слегка" изменить это следующим образом:
/data/stats/*[contains(name(),'_cost')]