Veröffentlicht 20. Februar 200718 j 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
20. Februar 200718 j 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
20. Februar 200718 j 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
20. Februar 200718 j 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?? :-(
20. Februar 200718 j Du sortiert erst die Kleinbuchstaben, dann die Großen: DevGuru XSLT element xsl:sort
20. Februar 200718 j 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
20. Februar 200718 j 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.