Kann ich einen XPath-Ausdruck in meinem Sheet, das in ihre Namen nur die Tiere mit dem String ‚_monkey‘ wählt?
z.B. Platzhalterzeichen '* _monkey'?
Diese Wildcard bedeutet eine Zeichenfolge mit "_monkey" enden, nicht eine Zeichenfolge enthält "_monkey".
Verwenden:
//animal[ends-with(@name, '_monkey')]
Die oben verwendet die Standard XPath 2.0 Funktion ends-with()
und ist somit nur in XSLT 2.0 zur Verfügung.
In XSLT 1.0 verwenden Sie den folgenden XPath 1.0 Ausdruck:
//animal[substring(@name, string-length(@name) -6)='_monkey']
Es ist die //
Abkürzung verwendet nicht empfohlen, da diese in ineffizienter Auswertung führen. Verwenden Sie eine spezifischere Kette von Standorttests, wenn die Struktur des XML-Dokuments bekannt ist. Wenn zum Beispiel die animal
Elemente alle Kinder des oberen Elements des XML-Dokuments sind, dann sind die folgenden XPath (2,0 oder 1,0, respectively) Ausdrücke könnten effizienter sein:
/*/animal[ends-with(@name, '_monkey')]
und
/*/animal[substring(@name, string-length(@name) -6)='_monkey']
auf einer spezifischen Bedürfnisse Je (zB Sie wirklich gemeint „enthält“ und nicht „endet mit“), die Funktionen contains()
, starts-with()
und substring()
auch nützlich sein können:
contains(someString, someTargetString)
starts-with(someString, someTargetString)
substring(someString, start-index, length) = someTargetString
Schließlich muss das match
-Attribut <xsl:templates>
keinen absoluten XPath-Ausdruck enthalten. - Es wird empfohlen, nur einen relativen XPath-Ausdruck zu verwenden, der genügend Kontext angibt.
Somit ist die oben als Spiel Ausdrücke verwendet werden, wie etwas sein:
<xsl:template match="animal[ends-with(@name, '_monkey')]">
und
<xsl:template match=
"animal[substring(@name, string-length(@name) -6)='_monkey']">
Welche Version von XSLT verwenden Sie? –
Gute Frage, +1. Siehe meine Antwort für XSLT 1.0 und XSLT 2.0 Lösungen.:) –
@iYasha Ich benutze derzeit 1.0, aber daran interessiert, die Unterschiede zwischen den beiden zu lernen. –