Announcement

Collapse
No announcement yet.

Sortierungsproblem

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

  • Sortierungsproblem

    XML:

    <PRE>
    &lt;?xml version ='1.0' encoding='ISO-8859-1'?&gt;
    &lt; ?xml-stylesheet type='text/xsl' href='test.xsl'?&gt;
    &lt; MONATS_STATISTIK&gt;
    &lt; DZ&gt;&lt;PA&gt;Bank1&lt;/PA&gt;&lt;BYTE&gt;00001000&lt;/BYTE&gt;&lt;/DZ&gt;
    &lt; DZ&gt;&lt;PA&gt;Bank2&lt;/PA&gt;&lt;BYTE&gt;00002048&lt;/BYTE&gt;&lt;/DZ&gt;
    &lt; DZ&gt;&lt;PA&gt;Bank3&lt;/PA&gt;&lt;BYTE&gt;00001024&lt;/BYTE&gt;&lt;/DZ&gt;
    &lt; DZ&gt;&lt;PA&gt;Bank1&lt;/PA&gt;&lt;BYTE&gt;00001000&lt;/BYTE&gt;&lt;/DZ&gt;
    &lt; DZ&gt;&lt;PA&gt;Bank2&lt;/PA&gt;&lt;BYTE&gt;00002047&lt;/BYTE&gt;&lt;/DZ&gt;
    &lt; /MONATS_STATISTIK&gt;
    </PRE>

    Ich will nun einfach folgende Ausgabe nach Spitzenvolumen erzielen:

    <PRE>
    Bank2 2048
    Bank3 1024
    Bank1 1000
    </PRE>

    Folgender Code sortiert leider falsch:
    <PRE>
    &lt;table&gt;
    &lt;tr&gt;
    &lt;td&gt;&lt;b&gt;DFÜ-Partner&lt;/b&gt;&lt;/td&gt;
    &lt;td width="20"/&gt;
    &lt;td align="right"&gt;&lt;b&gt;BYTE&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;xsl:variable name="dfu-PA" select="//PA[not(.=following::PA)]"/&gt;
    &lt;xsl:for-each select="$dfu-PA"&gt;
    &lt;tr&gt;
    &lt;xsl:variable name="aktueller_PA" select="."/&gt;
    &lt;td&gt;&lt;xsl:value-of select="$aktueller_PA"/&gt;&lt;/td&gt;
    &lt;td/&gt;
    &lt;xsl:for-each select="//DZ[contains(PA, $aktueller_PA)]"&gt;
    &lt;xsl:sort select="BYTE"/&gt;
    &lt;xsl:if test="position() = last()"&gt;
    &lt;td align="right"&gt;&lt;b&gt;&lt; xsl:value-of select="BYTE"/&gt;&lt;/b&gt;&lt;/td&gt;
    &lt;/xsl:if&gt;
    &lt;/xsl:for-each&gt;
    &lt;/tr&gt;
    &lt;/xsl:for-each&gt;
    </PRE>

    Jemand ne Idee?
    Muss ich das ev. in eine extra temporäre Tabelle anlegen mit Key?

    Gruss
    -Marco Wagner-

  • #2
    Beides sollte gehen.
    Mit key wird es als muenchian grouping technique in der Literatur bezeichnet.
    Mit einer Variablen geht es folgendermaßen:
    <PRE>
    <xsl:template match="/">
    <xsl:variable name="sortiert">
    <xsl:for-each select="MONATS_STATISTIK/DZ">
    <xsl:sort order="descending" select="BYTE"/>
    <xsl:copy-of select="."/>
    </xsl:for-each>
    </xsl:variable>

    <xsl:for-each select="$sortiert/DZ[not(PA = preceding-sibling:Z/PA)]">
    Bank:<xsl:value-of select="PA"></xsl:value-of> Wert:<xsl:value-of select="BYTE"/>
    </xsl:for-each>
    </xsl:template>

    </PRE&gt

    Comment

    Working...
    X