XPath wildcards na nazwie węzła

Chcę pobrać węzeł z mojego pliku XML, węzeł ma prefiks taki jak "latest_", ale to może się zmienić i zależy mi na tym, aby mój XSLT był jak najbardziej płynny. Oto XPath, którego chcę użyć:

/data/stats/*_cost

To powinno pasować latest_cost, newest_cost, anything_cost, jest na to jakiś sposób?

Pozdrawiam : -) [5]}
Author: Ben Everard, 2010-11-17

4 answers

Jest to poprawne wyrażenie XPath 1.0, w którym w dowolnej przestrzeni nazw zaznacza się element o ostatnich 5 znakach nazwy równy "_cost".

/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']
 62
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-17 12:34:11

Z XPath 1.0 możesz użyć wzorca /data/stats/*[substring-after(name(), '_cost') = '']. Sprawdza, czy nazwa elementu kończy się przyrostkiem _cost.

W XPath 2.0 jest {[2] } i odpowiadającym Ci wyrażeniem będzie *[ends-with(name(), '_cost')].

 6
Author: Alex Nikolaenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-24 13:39:55

Możesz również użyć contains

E. g

/data/stats[contains(.,'_cost')] 
 5
Author: redsquare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-17 10:02:30

Powyższe nie zadziałało dla mnie. Musiałem" lekko " zmodyfikować to w następujący sposób:

/data/stats/*[contains(name(),'_cost')]
 0
Author: David W.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-30 22:22:22