Announcement

Collapse
No announcement yet.

Probleme mit Sortierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit Sortierung

    Hallo,
    ich möchte für die Ausgabe eines Katalogs verschiedene Produkte (Bücher) nach den Namen der Autoren sortieren.
    Mein XML sieht wie folgt aus:
    Code:
    <Buch Sort="Schäde">
    ...	
    </Buch>
    <Buch Sort="Schade">
    ...	
    </Buch>
    <Buch Sort="Schaede">
    ...	
    </Buch>
    <Buch Sort="Schafer">
    ...	
    </Buch>
    <Buch Sort="Schäfer">
    ...	
    </Buch>
    <Buch Sort="Schaefer">
    ...	
    </Buch>
    Meine XSL für die Sortierung sieht wie folgt aus.
    Code:
    <xsl:for-each select="Buch">
    <xsl:sort select="@Sort" order="ascending" data-type="text" case-order="lower-first" lang="de"/>
    <Buch>
    	<xsl:copy-of select="."/>	
    </Buch>			
    </xsl:for-each>
    Das Ergebnis der Sortierung:
    Code:
    <Buch Sort="Schade">
    ...
    </Buch>
    <Buch Sort="Schäde">
    ...
    </Buch>
    <Buch Sort="Schaede">
    ...
    </Buch>
    <Buch Sort="Schaefer">
    ...
    </Buch>
    <Buch Sort="Schafer">
    ...
    </Buch>
    <Buch Sort="Schäfer">
    ...
    </Buch>
    Eigentlich müsste ja Schäfer bei Schaefer eingeordnet werden. Leider ist das jedoch nicht der Falls. Hat jemand eine Idee, wie ich das korrigieren könnte?
    Ist es irgendwie möglich, im Attribut @Sort die Ä, ä, Ö, ö, Ü, ü mit Ae, ae, Oe, oe, Ue, ue zu tauschen???
    Wer kann mir weiter helfen?
    Ich bin für alle Vorschläge dankbar.

  • #2
    for each nur für node-set
    zeigt das xsl nocht nicht verstanden ist
    der zweite buchstabe ist gleich deshalb mal so probieren

    translate(@Sort,'ÄÖÜäöü','AOUaou')

    Code:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output indent="yes" method="xml"/>
        <xsl:template match="/">
            <root>
                <xsl:apply-templates select="root"/>
            </root>
        </xsl:template>
        <xsl:template match="root">
            <xsl:apply-templates select="Buch">
                <xsl:sort select="translate(@Sort,'ÄÖÜäöü','AOUaou')"/>
            </xsl:apply-templates>
        </xsl:template>
        <xsl:template match="Buch">
            <a>
                <xsl:value-of select="@Sort"/>
            </a>
        </xsl:template>
    
    </xsl:stylesheet>

    Ergebnis

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <root>
       <a>Schäde</a>
       <a>Schade</a>
       <a>Schaede</a>
       <a>Schaefer</a>
       <a>Schafer</a>
       <a>Schäfer</a>
    </root>

    Comment


    • #3
      funktiioniert bei mir nicht

      zum lesen

      http://www.ibm.com/developerworks/li...x-xsltsorting/

      Comment


      • #4
        Wenn XSLT/XPath 2.0 möglich ist, dann probiere es mit fn:replace():

        Code:
        <xsl:sort select="fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Sort,'ä','ae'),'ö','oe'),'ü','ue'),'Ä','Ae'),'Ö','Oe'),'Ü','Ue')"  ... />
        Reihenfolge mit Saxon 9.2 HE und AltovaXML 2009 jeweils:

        Schade
        Schäde
        Schaede
        Schäfer
        Schaefer
        Schafer

        Comment


        • #5
          fn:replace() funktioniert. DANKE!

          for each nur für node-set
          Ich verstehe nicht ganz warum. Es funktioniert doch aber auch so und in meiner Literatur steht das auch nicht so. Was ist denn der Vorteil der anderen Vorgehensweise?

          Comment

          Working...
          X