diese Quelle XML Betrachten:für-jeden-Gruppe und Art (aber einige Werte ignorieren)
<root>
<value price="50">
<type name="bike"/>
<interesting value="no"/>
</value>
<value price="1">
<type name="car"/>
<interesting value="no"/>
</value>
<value price="123">
<type name="bike"/>
<interesting value="yes"/>
</value>
<value price="234">
<type name="bike"/>
<interesting value="yes"/>
<pedals madeof="gold" />
</value>
<value price="150">
<type name="car"/>
<interesting value="yes"/>
</value>
</root>
Jetzt würde ich alle Fahrräder Gruppe mögen und alle Autos zusammen, aber die Reihenfolge der Preis sein sollte (billig zu teuer) aber nur unter Berücksichtigung der Fahrräder und Autos mit <interesting value="yes"/>
.
Mein XSLT ist
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="root">
<out>
<xsl:for-each-group select="value" group-by="type/@name">
<xsl:sort select="@price" data-type="number"/>
<elt>
<xsl:attribute name="grouping-key" select="current-grouping-key()"/>
<xsl:attribute name="min-price" select="@price"/>
</elt>
</xsl:for-each-group>
</out>
</xsl:template>
</xsl:stylesheet>
Welche Filter für die <interesting value="yes"/>
ignoriert. Das Ergebnis ist
<out>
<elt grouping-key="car" min-price="1"/>
<elt grouping-key="bike" min-price="50"/>
</out>
aber es sollte
<out>
<elt grouping-key="bike" min-price="123"/>
<elt grouping-key="car" min-price="150"/>
</out>
sein, weil die bike[interesting/@value='yes']
ist billiger als die car[interesting/@value='yes']
Es kann mehr als zwei Arten von jedem Fahrzeug sein und mehr Einträgen mit interesting="yes"
.
Wie kann ich nach dem Preis sortieren, sondern nur diejenigen berücksichtigen, die "interessant" sind?
Ich habe Ihre Lösung versucht, die gut funktioniert, bis ich einen anderen "interessanten" Eintrag für Fahrrad habe. Siehe meine überarbeitete Frage (ich habe dort einen anderen Abschnitt eingefügt). Ich erhalte den Fehler 'XTETE1020: Eine Folge von mehr als einem Artikel ist nicht erlaubt als @select-Attribut von xsl: sort'. – topskip
@topskip aktualisiert –
Sorry für die späten "akzeptieren", aber vielen Dank noch einmal für Ihre Antwort. – topskip