chrisen
Goto Top

XSLT Sortierung

Hallo zusammen,

ich habe folgendes Problem mit einer XSLT Datei:

Ich stehe irgendwie gerade auf dem Schlauch...
Vielleicht hat jemand von euch eine Idee / Tipp


Es geht um folgende XML Datei:

<DocumentElement>
<article>
    <active>1</active>
    <ItemCode>23456</ItemCode>
    <name>P22</name>
  </article>

<article>
    <active>1</active>
    <ItemCode>12345</ItemCode>
    <name>P10</name>
  </article>

<article>
    <active>1</active>
    <ItemCode>34567</ItemCode>
    <name>P35</name>
</article>

<article>
    <ItemCode>45678</ItemCode>
    <name>P108</name>
</article>
</DocumentElement>

Diese würde ich gerne so haben: Also sortiert nach der Nummer die in "Name" nach dem P kommt

<DocumentElement>
<article>
    <ItemCode>12345</ItemCode>
    <name>P10</name>
  </article>

<article>
    <ItemCode>23456</ItemCode>
    <name>P22</name>
  </article>

<article>
    <ItemCode>34567</ItemCode>
    <name>P35</name>
  </article>

<article>
    <ItemCode>45678</ItemCode>
    <name>P108</name>
</article>
</DocumentElement>

Jetzt gibt es ja in XSLT die Möglichkeit zu sortieren. Ich habe folgendes probiert:

<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">  
<xsl:template match="/">  
  <Root>
 <sort>
 <xsl:for-each select="DocumentElement/article">  

 <xsl:sort select="name" order="descending" data-type="text" />  
 <ItemCode><xsl:value-of select="ItemCode"/> </ItemCode>  
 <name><xsl:value-of select="name"/></name>  
 
 	    </xsl:for-each>

 </sort>
 </Root>
 </xsl:template>
</xsl:stylesheet>

Raus kommt natürlich nur die Sortierung nach dem Buchstaben aber nicht nach der Nummer danach. Mit Type Number das gleiche

Würde mich riesig über eine Antwort freuen !

Grüße,
chrisen

Content-ID: 333024

Url: https://administrator.de/contentid/333024

Ausgedruckt am: 05.12.2024 um 01:12 Uhr

132692
Lösung 132692 23.03.2017 aktualisiert um 14:44:03 Uhr
Goto Top
Ich stehe irgendwie gerade auf dem Schlauch...
Wieso steht hier jeder zweite auf dem "Schlauch"?, der hat euch doch nichts böses getan face-big-smile.

Nimm einfach die Substring Funktion im select und überspringst damit das P, dort darfst du ja mit xpath arbeiten:
<xsl:sort select="substring(name,2)" order="ascending" data-type="number" />
Gruß p.
chrisen
chrisen 23.03.2017 um 14:45:03 Uhr
Goto Top
Und wieder mal so einfach.

Vielen vielen Dank!!
chrisen
chrisen 23.03.2017 um 15:23:03 Uhr
Goto Top
Ich jetzt leider noch ein Problem:
Ich möchte nur die Sortieren, die mit einem P anfangen. Andere (hier im Beispiel jetzt nicht gelistet) die mit G oder H anfangen möchte ich nicht sortieren.

Eigentlich dachte ich dass ich das entweder mit einem XSL IF oder XSL WHEN/CHOOSE machen kann. Leider funktioniert dann gar nichts mehr?!

Grüße,
chrisen
132692
132692 23.03.2017 aktualisiert um 16:28:09 Uhr
Goto Top
Ich jetzt leider noch ein Problem:
"Ich dir kommen mit Lösung face-big-smile"

Mach im xsl:foreach ein Select mit der starts-with() Funktion ! face-wink
<xsl:for-each select="DocumentElement/article[starts-with(name,'P')]">  
 <xsl:sort select="substring(name,2)" order="ascending" data-type="number" />  
Du solltest dir mal XPath am Wochenende rein ziehen wenn du schon mit XSLT hantierst ...

going to standby for next question
chrisen
chrisen 23.03.2017 um 18:25:48 Uhr
Goto Top
Zitat von @132692:

Ich jetzt leider noch ein Problem:
"Ich dir kommen mit Lösung face-big-smile"

Ups, da fehlt was :D


Zitat von @132692:
Du solltest dir mal XPath am Wochenende rein ziehen wenn du schon mit XSLT hantierst ...
Wird gemacht

Und vielen Dank nochmal!