Angesichts die folgende XML-Datei Text:XSLT Art mit Zahlen arbeiten, aber nicht
<?xml version="1.0"?>
<mappings>
<mapping>
<class-a>C</class-a>
<class-b>a</class-b>
</mapping>
<mapping>
<class-a>B</class-a>
<class-b>b</class-b>
</mapping>
<mapping>
<class-a>A</class-a>
<class-b>c</class-b>
</mapping>
</mappings>
Und folgende XSLT-Datei:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="mappings">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="(name() = 'mapping')*class-a" data-type="text" order="ascending" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Erzeugt dieses schlechte XML-Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
<class-a>C</class-a>
<class-b>a</class-b>
</mapping>
<mapping>
<class-a>B</class-a>
<class-b>b</class-b>
</mapping>
<mapping>
<class-a>A</class-a>
<class-b>c</class-b>
</mapping>
</mappings>
Erwartete Ergebnis ist:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
<class-a>A</class-a>
<class-b>c</class-b>
</mapping>
<mapping>
<class-a>B</class-a>
<class-b>b</class-b>
</mapping>
<mapping>
<class-a>C</class-a>
<class-b>a</class-b>
</mapping>
</mappings>
Zuordnungen sollten alphabetisch nach class-a
Elementwerten sortiert werden.
von Zahlen anstelle von Strings in class-a
Elemente von XML-Eingabe mit:
<?xml version="1.0"?>
<mappings>
<mapping>
<class-a>3</class-a>
<class-b>a</class-b>
</mapping>
<mapping>
<class-a>2</class-a>
<class-b>b</class-b>
</mapping>
<mapping>
<class-a>1</class-a>
<class-b>c</class-b>
</mapping>
</mappings>
mit entweder data-type="text"
oder data-type="number"
in XSLT Art-Tag, wir werden immer das gleiche erwartete Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
<class-a>1</class-a>
<class-b>c</class-b>
</mapping>
<mapping>
<class-a>2</class-a>
<class-b>b</class-b>
</mapping>
<mapping>
<class-a>3</class-a>
<class-b>a</class-b>
</mapping>
</mappings>
Weiß jemand, wie man das Ergebnis auch mit Text erwartet?
Was bedeutet '(name() = 'mapping') * class-a '? '' erwartet XPath, dies ist kein XPath. –
Tomalak
Ich bin mir nicht sicher, dass dies wirklich XPath ist, fand es aber aus akzeptierter Antwort: [link] (http://stackoverflow.com/questions/2878809/xml-and-xslt-need-it-to-sort-only- bestimmte-Kind-Knoten) – ma3j
Ohh, ich verstehe. Das ist nicht anwendbar auf Ihre Situation. Sie möchten einfach nach Klasse-a sortieren, genau wie @Rupesh es vorschlägt. – Tomalak