<xsl:sort> funktioniert nicht

AKST

Erfahrenes Mitglied
Hallo Leute ich bin XSLT-Neuling und habe ein Problem mit der Sortierung von <xsl:sort>

Ich habe folgende einfache XML-Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>

<Personen>
	  <Person>
			<name>Fritz</name>
			<guthaben>2000</guthaben>
	  </Person>
	  
	  <Person>
			<name>Anton</name>		
			<guthaben>1000</guthaben>  
	  </Person>
	  
	  <Person>
			<name>Fred</name>
			<guthaben>3000</guthaben> 
	  </Person>
</Personen>

Dazu habe ich folgende einfache XSLT-DATEI erstellt. Diese soll die XML-Datei in HTML ausgeben, sortiert nach dem Guthaben der Personen:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2004/07/xpath-functions" xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes">
	
	
	
	<xsl:output method="html" encoding="UTF-8" indent="yes"/>
	
	
	<xsl:template match="Personen">
			
			<xsl:apply-templates select="Person">
			  <xsl:sort select="guthaben" data-type="number" order="descending" />
			</xsl:apply-templates>       
    </xsl:template>
    
    <xsl:template match="Person">
      <br />
      <xsl:apply-templates/>
    </xsl:template>
    
</xsl:stylesheet>

Mein Problem ist, dass immer folgendes Ergebnis kommt:
Fritz 2000
Anton 1000
Fred 3000

Die folgende Zeile wird nicht berücksichtigt:
<xsl:sort select="guthaben" data-type="number" order="descending" />

Woran kann das liegen? Ich habe schon eine Menge ausprobiert aber es klappt einfach nicht. Ich muss dazu sagen, dass ich XML-SPY 2005 in der kostenlosen Homeversion verwende.

Gruß
 
Zuletzt bearbeitet:
Hallo!

Ich glaube XSL-Sort funktioniert nur im Kontext einer for-each Schleife:

Das hier funktioniert:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2004/07/xpath-functions" xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes">
	<xsl:output method="html" encoding="UTF-8" indent="yes"/>
	
	<xsl:template match="/">
		<html>
			<head>
				<title>Foo
				</title>
			</head>
			<body>
				<xsl:apply-templates/>
			</body>
		</html>
	</xsl:template>
	
	
	<xsl:template match="Personen">
			
			<xsl:for-each select="Person">
				<xsl:sort select="guthaben" data-type="number" order="descending" />
				<xsl:apply-templates/>
				<br/>
			</xsl:for-each>
    </xsl:template>
    
    <xsl:template match="Person">
    	<xsl:value-of select="text()"/>
    </xsl:template>
          
</xsl:stylesheet>

Ausgabe:
Code:
<html xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2004/07/xpath-functions" xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes">
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Foo
				</title>
</head>
<body>
				  Fred    
			
				  3000
			<br>
				  Fritz    
			
				  2000
			<br>
				  Anton    
			
				  1000
			<br></body>
</html>

bzw.

Fred 3000
Fritz 2000
Anton 1000

Gruß Tom
 
Hallo Thomas,

laut meinem Buch sollte das aber so ähnlich funktionieren wie ich es habe. In diesem Buch (XSLT 2.0) von Galileo computing ist dieses Beispiel in ähnlicher Form drin (habe leider keine Begleit CD mit den Beispielen). Die for-each Schleife auch wird im nächsten Kapitel dann zum ersten Mal erwähnt. Dein Beispiel funktioniert auf jeden Fall.

Gruß
 
Zuletzt bearbeitet:
xsl:sort funktioniert auch innerhalb apply-templates. Bei mir funktioniert das Beispiel auch ohne Probleme. Bei Dir liegts vielleicht an dem verwendeten XSLT-Prozessor von XML-Spy. Ich benutze Xalan.
 
Hallo,

das habe ich mir auch schon gedacht, dass es am XSLT-Prozessor von XML-SPY 2005 liegen könnte.
Nun gut, werde mal sehen, ob man den austauschen kann.
 
Zuletzt bearbeitet:
Zurück