webentwicklung-frage-antwort-db.com.de

XPath-Platzhalter für Knotennamen

Ich möchte einen Knoten aus meiner XML-Datei abrufen. Der Knoten hat ein Präfix wie "latest_". Dies kann sich jedoch ändern, und ich möchte, dass mein XSLT so flüssig wie möglich ist. Hier ist der XPath, den ich verwenden möchte:

/data/stats/*_cost

Dies sollte mit latest_cost, newest_cost, anything_cost Übereinstimmen. Gibt es eine Möglichkeit, dies zu tun?

Prost :-)

42
Ben Everard

Dies ist der richtige XPath 1.0-Ausdruck, der ein Element mit den letzten 5 Zeichen des Namens in einem beliebigen Namespace gleich "_cost" auswählt.

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

Sie könnten auch contains verwenden

z.B

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

Mit XPath 1.0 können Sie /data/stats/*[substring-after(name(), '_cost') = ''] pattern verwenden. Damit wird überprüft, ob der Name des Elements mit dem Suffix _cost Endet.

In XPath 2.0 gibt es fn:ends-with(str, str) und Ihr entsprechender Ausdruck wird *[ends-with(name(), '_cost')] sein.

6

Das oben genannte hat bei mir nicht funktioniert. Ich musste das wie folgt "leicht" modifizieren:

/data/stats/*[contains(name(),'_cost')]
4
David W.