Подтвердить что ты не робот

Подстановочные знаки XPath на имя node

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

/data/stats/*_cost

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

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

4b9b3361

Ответ 1

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

/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']

Ответ 2

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

e.g

/data/stats[contains(.,'_cost')] 

Ответ 3

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

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

Ответ 4

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

/data/stats/*[contains(name(),'_cost')]