<xsl:sort> Parameter für select="" und oder="" verwenden
André Laugks
- xsl
Hallo!
Ich möchte Paramater für die Attribute select und order verwenden. Die Paramter übergebe ich dem XSLT-Prozessor und werden mir auch korrekt ausgegeben.
Leider interesiert sich xsl:sort nicht dafür. Es wird einfach nicht angewendet. Es kommt keine Fehlermeldung.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="SORT_COL"/> <!-- name -->
<xsl:param name="ORDER"/> <!-- descending -->
<xsl:template>
<xsl:value-of select="$SORT_COL"/>
<xsl:value-of select="$ORDER"/>
<xsl:apply-templates>
<xsl:sort select="$SORT_COL" order="$ORDER"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
André Laugks
Hallo André,
Ich möchte Paramater für die Attribute select und order verwenden. Die Paramter übergebe ich dem XSLT-Prozessor und werden mir auch korrekt ausgegeben.
Leider interesiert sich xsl:sort nicht dafür. Es wird einfach nicht angewendet. Es kommt keine Fehlermeldung.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="SORT_COL"/> <!-- name -->
<xsl:param name="ORDER"/> <!-- descending --><xsl:value-of select="$SORT_COL"/>
<xsl:value-of select="$ORDER"/>xsl:apply-templates
<xsl:sort select="$SORT_COL" order="$ORDER"/>
</xsl:apply-templates></xsl:template>
</xsl:stylesheet>
Es geht (so) auch nicht.
(Der Wert von select muss ein XPath-Ausdruck "Expr." sein, was letzen Endes auf: 'AxisSpecifier', 'NodeTest' und 'Predicate' ausläuft <http://www.w3.org/TR/xpath#NT-Expr>)
Angewendet wird deine Sortierung schon, aber der Wert (und der wird beim <xsl:sort> zu eninem String konvertiert) von $SORT\_COL ist für jedes der zu sortierenden Elemente ein und dasselbe, also wird die Liste weiterhin unsortiert ausgegeben.
Du kannst es so machen:
<xsl:sort select="\*[local-name() = $SORT\_COL]" order="{$ORDER}"/> falls $SORT\_COL der Namen eines Elementes darstellt und beachte bitte das {} im order=""! Der wert von $ORDER muss zwingend ascending oder descending sein.
Grüße
Thomas
Hallo Thomas!
(Der Wert von select muss ein XPath-Ausdruck "Expr." sein, was letzen Endes auf: 'AxisSpecifier', 'NodeTest' und 'Predicate' ausläuft http://www.w3.org/TR/xpath#NT-Expr)
Ich übergebe Ihm also einen "banalen" String und deshalb wird es nicht angewendet. Wenn ich es ohne Parameter mache, also direkt rein schreibe, sieht es der Prozessor als XPath-Ausdruck an?!
Du kannst es so machen:
<xsl:sort select="*[local-name() = $SORT_COL]" order="{$ORDER}"/> falls $SORT_COL der Namen eines Elementes darstellt und beachte bitte das {} im order=""! Der wert von $ORDER muss zwingend ascending oder descending sein.
So, ich habe es jetzt mal probiert. Das Element wird nun richtig selectiert. Egal was (ascending/descending) ich in $ORDER habe, es wird immer absteigend sortiert.
André Laugks
Hallo,
(Der Wert von select muss ein XPath-Ausdruck "Expr." sein, was letzen Endes auf: 'AxisSpecifier', 'NodeTest' und 'Predicate' ausläuft http://www.w3.org/TR/xpath#NT-Expr)
Ich übergebe Ihm also einen "banalen" String und deshalb wird es nicht angewendet. Wenn ich es ohne Parameter mache, also direkt rein schreibe, sieht es der Prozessor als XPath-Ausdruck an?!
Der Ausdruck muss eben den REgeln von "Expr." entsprechen und der kann letzen endes nur aus 'AxisSpecifier' (parent::, etc.), 'NodeTest' (Element, Attribut etc.) und 'Predicate' ([...]) bestehen.
Du kannst es so machen:
<xsl:sort select="*[local-name() = $SORT_COL]" order="{$ORDER}"/> falls $SORT_COL der Namen eines Elementes darstellt und beachte bitte das {} im order=""! Der wert von $ORDER muss zwingend ascending oder descending sein.So, ich habe es jetzt mal probiert. Das Element wird nun richtig selectiert. Egal was (ascending/descending) ich in $ORDER habe, es wird immer absteigend sortiert.
Bei meinem Test macht libxslt und saxon die Sortierung richtig.
Schreibe mal einfach direkt ascending oder descending hinein und schau ob die Sortierung dann klappt.
Grüße
Thomas
Hallo Thomas!
Bei meinem Test macht libxslt und saxon die Sortierung richtig.
Schreibe mal einfach direkt ascending oder descending hinein und schau ob die Sortierung dann klappt.
Es funktioniert auch. Zum Testen hatte ich noch ein <xsl:variable name="ORDER">descending</xsl:variable> in dem Template stehe ;-(! Rrrrhhhh!
Vielen Dank!
André Laugks