Zum Inhalt springen

XSLT2.0: Sortieren nach Attributen?!


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?? :-(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...