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?
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']
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')]
.
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')]
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')]
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