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-Key: 333024

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

Printed on: April 26, 2024 at 03:04 o'clock

Mitglied: 132692
Solution 132692 Mar 23, 2017 updated at 13:44:03 (UTC)
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.
Member: chrisen
chrisen Mar 23, 2017 at 13:45:03 (UTC)
Goto Top
Und wieder mal so einfach.

Vielen vielen Dank!!
Member: chrisen
chrisen Mar 23, 2017 at 14:23:03 (UTC)
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
Mitglied: 132692
132692 Mar 23, 2017 updated at 15:28:09 (UTC)
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
Member: chrisen
chrisen Mar 23, 2017 at 17:25:48 (UTC)
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!