XPath wildcards on node name
I want to grab a node from my XML file, the node has a prefix such as "latest_", but this may change and I'm keen for my XSLT to be as fluid as possible. Here's the XPath I want to use:
/data/stats/*_cost
This should match latest_cost
, newest_cost
, anything_cost
, is there a way of doing this?
Cheers :-)
This is the correct XPath 1.0 expression which selects an element with the last 5 character of name equal to "_cost" in any namespace.
/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']
You could also use contains
e.g
/data/stats[contains(.,'_cost')]
With XPath 1.0 you can use /data/stats/*[substring-after(name(), '_cost') = '']
pattern. That checks if the element's name ends with the _cost
suffix.
In XPath 2.0 there is fn:ends-with(str, str)
and your corresponding expression will be *[ends-with(name(), '_cost')]
.
The above did not work for me. I had to "slightly" modify that as follows:
/data/stats/*[contains(name(),'_cost')]