mogę zrobić wyrażenie XPath w moim arkusza stylów, który wybiera tylko zwierząt z string „_monkey” w ich nazwy?
np. symbol wieloznaczny "* _monkey"?
Ten wieloznaczny oznacza ciąg kończąc "_monkey", nie łańcuch zawierający "_monkey".
Zastosowanie:
//animal[ends-with(@name, '_monkey')]
powyższych zastosowań standardowych funkcji XPath 2.0 ends-with()
, a zatem jest dostępna tylko w XSLT 2.0.
XSLT 1,0 użyć następującego XPath 1,0 ekspresji:
//animal[substring(@name, string-length(@name) -6)='_monkey']
Nie zaleca się stosowanie skrót //
, ponieważ może to prowadzić do nieefektywnego oceny. Użyj bardziej specyficznego łańcucha testów lokalizacji, gdy znana jest struktura dokumentu XML. Na przykład, jeśli animal
elementy są wszystkie dzieci z górnego elementu dokumentu XML, a następnie poniższej XPath (2.0 lub 1.0, odpowiednio) wyrażenia może być bardziej efektywny:
/*/animal[ends-with(@name, '_monkey')]
i
/*/animal[substring(@name, string-length(@name) -6)='_monkey']
zależności od konkretnych potrzeb własnych (np naprawdę oznaczało „zawiera”, a nie „kończy się”), funkcje contains()
, starts-with()
i substring()
mogą być również użyteczne:
contains(someString, someTargetString)
starts-with(someString, someTargetString)
substring(someString, start-index, length) = someTargetString
Wreszcie, atrybut match
z <xsl:templates>
nie musi zawierać bezwzględnego wyrażenia XPath - zaleca się użycie tylko względnego wyrażenia XPath, które określa wystarczająco dużo kontekstu.
Zatem, powyższe stosowane jako wyrażenia mecz będzie coś jak:
<xsl:template match="animal[ends-with(@name, '_monkey')]">
i
<xsl:template match=
"animal[substring(@name, string-length(@name) -6)='_monkey']">
Jaka wersja XSLT używacie? –
Dobre pytanie, +1. Zobacz moją odpowiedź na rozwiązania XSLT 1.0 i XSLT 2.0.:) –
@iYasha Używam obecnie wersji 1.0, ale chcę poznać różnice między nimi. –