Ladon Geschrieben 20. Februar 2007 Geschrieben 20. Februar 2007 Hallo zusammen. Ich hab schon ziemlich lange versucht mit XSLT2.0 eine Liste nach den jeweiligen Attributen zu sortieren. Aber man kann wohl mit <xsl:sort...> nur den jeweiligen Inhalt sortieren. Ist das richtig? Bsp: <Name type="PB" name="abcde">12345</Name> <Name type="PB" name="FGHI">4711</Name> <Name type="PB" name="JkLmN">47112</Name> Ich will so eine Liste eigentlich nach dem "@name" Attribut sortieren. also das nach "abcde" dann "JkLmN" dann "FGHI" sortiert wird. Aber (angeblich) kann man mit "<xsl:sort...>" nur nach den jeweiligen values von "<Name>" sortieren. Sprich: nach "12345" dann "47112" dann "4711". Ist das wirklich richtig das XSLT2.0 nicht in der Lage ist nach attributen zu sortieren?! Oder muss man dafür einen anderen Befehl verwenden? Bedingung ist einfach das ich das mit "lower-first" machen muss. Also das er nach Kleinbuchstaben sortieren Schon mal vielen Dank. Ladon
Ladon Geschrieben 20. Februar 2007 Autor Geschrieben 20. Februar 2007 Ich hab es jetzt. Funktioniert sogar schon mit XSLT1.0 nochmal für alle: <?xml version="1.0"?> <beispiel> <Name type="PB" value="7">A</Name> <Name type="PB" value="2">B</Name> <Name type="PB" value="5">C</Name> </beispiel> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" encoding="ISO-8859-1"/> <xsl:template match="beispiel"> <beispiel> <xsl:for-each select="Name"> <xsl:sort select="@value" data-type="number"/> <xsl:copy-of select="."/> </xsl:for-each> </beispiel> </xsl:template> </xsl:stylesheet> Ergebnis: <?xml version="1.0" encoding="ISO-8859-1"?> <beispiel> <Name type="PB" value="2">B</Name> <Name type="PB" value="5">C</Name> <Name type="PB" value="7">A</Name> </beispiel> Grüße Ladon
Ladon Geschrieben 20. Februar 2007 Autor Geschrieben 20. Februar 2007 ok. aber das hauptproblem besteht noch immer. Ich kann das ganze einfach nicht mit Buchstaben machen. die einzigste möglichkeit ist wohl das ich jedem Buchstaben in eine Zahl umwandle, diese sortiere, und dann wieder umwandle. Ich denke sonst gibt es da keine Möglichkeit oder? Danke Ladon
Ladon Geschrieben 20. Februar 2007 Autor Geschrieben 20. Februar 2007 Was mir nicht so ganz klar ist: Meine Eingabe ist: <beispiel> <Name type="PB" value="abcde">A</Name> <Name type="PB" value="ABCDE">B</Name> <Name type="PB" value="ZYXWV">D</Name> <Name type="PB" value="abcdx">C</Name> <Name type="PB" value="vwxyz">E</Name> <Name type="PB" value="zyxwv">F</Name> <Name type="PB" value="zyxWV">G</Name> <Name type="PB" value="ZYxwv">H</Name> </beispiel> Mein Stylesheet: <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 method="xml" version="1.0" encoding="ISO-8859-2" indent="yes"/> <xsl:template match="beispiel"> <beispiel> <xsl:for-each select="Name"> <xsl:sort select="@value" data-type="text" case-order="lower-first"/> <xsl:copy-of select="."/> </xsl:for-each> </beispiel> </xsl:template> </xsl:stylesheet> Man beachte hier " data-type="text" ". Ausgabe ist: <beispiel> <Name type="PB" value="abcde">A</Name> <Name type="PB" value="ABCDE">B</Name> <Name type="PB" value="abcdx">C</Name> <Name type="PB" value="vwxyz">E</Name> <Name type="PB" value="zyxwv">F</Name> <Name type="PB" value="zyxWV">G</Name> <Name type="PB" value="ZYxwv">H</Name> <Name type="PB" value="ZYXWV">D</Name> </beispiel> Nun mit " data-type="number" ". dann folgende Ausgabe: <beispiel> <Name type="PB" value="abcde">A</Name> <Name type="PB" value="ABCDE">B</Name> <Name type="PB" value="ZYXWV">D</Name> <Name type="PB" value="abcdx">C</Name> <Name type="PB" value="vwxyz">E</Name> <Name type="PB" value="zyxwv">F</Name> <Name type="PB" value="zyxWV">G</Name> <Name type="PB" value="ZYxwv">H</Name> </beispiel> Hier wurde wohl garnichts gemacht. Wobei ja "number" strings in zahl umwandelt. Also irgendwas tut es ja eben. Aber in der Ausgabe sehe ich nichts davon... Aber es muss doch mit data-type="number" oder data-type="text" möglich sein eine stringkette nach den oben genannten wünschen zu sortieren, oder?? Aber WIE?? :-(
etreu Geschrieben 20. Februar 2007 Geschrieben 20. Februar 2007 Du sortiert erst die Kleinbuchstaben, dann die Großen: DevGuru XSLT element xsl:sort
Ladon Geschrieben 20. Februar 2007 Autor Geschrieben 20. Februar 2007 das ist ja schön und gut. aber genau da liegt ja das Problem. mit Zahlen ist das ja wie gesagt easy. Nur eben die Buchstaben. Mit "sort" sortiert er nicht von aCbAD nach abACD sondern nach aAbCD. Das ist das große kleine Problem... Aber trotzdem danke Ladon
Schiller256 Geschrieben 20. Februar 2007 Geschrieben 20. Februar 2007 Versuche mal das hier: <xsl:template match="beispiel"> <beispiel> <xsl:for-each select="Name"> <xsl:sort select="translate(@value, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" data-type="text" case-order="lower-first" /> <xsl:copy-of select="." /> </xsl:for-each> </beispiel> </xsl:template> Mit dem translate habe ich es geschafft dass die groß und klein Schreibung ignoriert wird. Das meine ich ist das was du suchst. Bitte nutze doch auch die CODE oder PHP Tags damit wird dein Quelltext lesbarer.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden