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 Zitieren
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 Zitieren
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 Zitieren
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?? :-( Zitieren
etreu Geschrieben 20. Februar 2007 Geschrieben 20. Februar 2007 Du sortiert erst die Kleinbuchstaben, dann die Großen: DevGuru XSLT element xsl:sort Zitieren
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 Zitieren
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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.