Announcement

Collapse
No announcement yet.

Elemente mehrerer Nodes konkatinieren???

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

  • Elemente mehrerer Nodes konkatinieren???

    Hallo zusammen!

    Da ich inzwischen schon alles erdenklich ausprobiert habe ohne weiterzukommen, will ich mich in letzter Hoffnung an Euch wenden. Und zwar versuche ich mehrere Elemente (punktName) verschiedener Nodes zusammenzufassen. Ich habe allerdings keine Ahnung wie ich es realiseren kann.

    Mein XML File hat die folgenden Struktur.

    Code:
    <selection>
        <spediteur>
      <lfs rowspan="3">
                <row spediteur="TestSped" bestellnr="SJT070" lfsnr="16145A" datum="2008-03-05T00:00:00" ziel="BBBB" lfs_refnr="6041" lfs_emenge="tl" lfsGuid="000afa694b8b4c418f50a9612354e33f" lfs_transportnr="16145A" werksmassLUT="32.120" lmenge="9.342" pguid_ref="010C6BB3001808AC906D000000000000" wmValid="3" punktName="e" menge="1.6267999e+002" emenge="Fm" holzart="Fi" sortierung="Abs" guete="B/C" laenge="6.1">
                    <lmengeLfsUnit>5.06</lmengeLfsUnit>
                    <werksmass>10.12</werksmass>
                    <sorte>Fi, Abs, B/C, 6,10</sorte>
                </row>
                <row spediteur="TestSped" bestellnr="SJT070" lfsnr="16122A" datum="2008-03-05T00:00:00" ziel="BBBB" lfs_refnr="6041" lfs_emenge="tl" lfsGuid="000afa694b8b4c418f50a9612354e33f" lfs_transportnr="16145A" werksmassLUT="32.120" lmenge="20.308" pguid_ref="010C6BB3002506CCAB08000000000000" wmValid="3" punktName="160" menge="1.2870000e+001" emenge="Fm" holzart="Fi" sortierung="Abs" guete="B/C" laenge="6.1">
                    <lmengeLfsUnit>11.00</lmengeLfsUnit>
                    <werksmass>22.00</werksmass>
                    <sorte>Fi, Abs, B/C, 6,10</sorte>
                </row>
                <menge>12.87</menge>
                <emenge>Fm</emenge>
                <unit>tl</unit>
                <datum>2008-03-05</datum>
                <wmunit>tl</wmunit>
                <lmengeSumme>16.06</lmengeSumme>
                <wmmenge>32.12</wmmenge>
            </lfs>
        </spediteur>
    Das Stylesheet ist jedoch so strukturiert, dass es für jede Node Lfs nur eine Zeile erzeugt! Das muss auch so bleiben! Ist meine Vorstellung trotzdem zu realisieren?
    Code:
    <xsl:template match="/selection">
    <xsl:for-each select="spediteur">
    <xsl:for-each select=" lfs">	
    
    <xsl:sort data-type="text" select="row[1]/@spediteur"/>
    <xsl:sort data-type="text" select="row[1]/@bestellnr"/>	
    <xsl:sort data-type="text" select="row[1]/@lfsnr"/><tr>
    
    <td rowspan="{@rowspan}"> <span style="font-weight: bold; color: rgb(255, 0, 0);"><xsl:value-of select="row[1]/@lfsnr"/></span>
    <br/><xsl:value-of select="row[1]/@lfs_refnr"/><br/><xsl:value-of select="row[1]/@lfs_transportnr"/></td>
    <td rowspan="{@rowspan}"><xsl:value-of select="row[1]/@bestellnr"/></td>
    <td rowspan="{@rowspan}"><xsl:value-of select="row[1]/@spediteur"/></td>
    <td rowspan="{@rowspan}"><xsl:value-of select="datum"/></td>
    <td rowspan="{@rowspan}"><xsl:value-of select="row[1]/@ziel"/></td><td rowspan="{@rowspan}"><xsl:value-of select="lfs/@row/@punktName"/></td>
    <td rowspan="{@rowspan}"><xsl:if test="menge &gt; 0"><xsl:value-of select="format-number(menge, '#.##0,00')"/>*<xsl:value-of select="emenge"/></xsl:if></td>
    <td rowspan="{@rowspan}"><xsl:if test="lmengeSumme &gt; 0"><xsl:value-of select="format-number(lmengeSumme, '#.##0,00')"/> <xsl:value-of select="unit"/></xsl:if></td>
    <td rowspan="{@rowspan}"><xsl:if test="wmmenge &gt; 0"><xsl:value-of select="format-number(wmmenge, '#.##0,00')"/> <xsl:value-of select="wmunit"/></xsl:if></td></tr>
    <xsl:for-each select="row">
    <tr display="none">
    </tr>
    </xsl:for-each>
    </xsl:for-each>		
    </xsl:for-each>
    Ich wäre Euch sehr für Eure Hilfe dankbar!

    Gruss, Freezer

  • #2
    Wenn die Attributwerte "e" und "160" zusammengeführt werden sollen, dann so (Kontext ggf. anpassen):
    Code:
    <xsl:value-of select="concat(//lfs/row[1]/@punktName,//lfs/row[2]/@punktName)"/>

    Comment


    • #3
      @ Thomas

      Hallo und vielen Dank für Deine rasche Antwort. So ungefähr habe ich mir das vorgestellt. Das Problem ist bloss, dass ich alle Elemente punktName pro LFS Node konkatinieren muss und vorher nicht weiss wieviele Elemente es gibt! Daher kann ich die Konkatinierungsprozedur nicht vorher statisch bilden.

      Ich hoffe ich habe mich nicht zu umständlich ausgedrückt und DU hast eventuell einen Tipp wie man "n" Elemente (punktName) in einem LFS automatisch zusammenfassen kann.

      Gruss und einen schönenn Samstag wünsche ich!

      Gruss, Freezer

      Comment


      • #4
        Probiere es in dieser Form:
        Code:
        <xsl:for-each select="row[@punktName]">
          <xsl:value-of select="@punktName"/>
        </xsl:for-each>
        oder verwende eine Strategie mit xsl:call-template.

        Comment


        • #5
          Hallo Thomas!
          Vielen Dank für Deine Antwort! Dein Vorschlag entspricht so ziemlich dem was ich suchte! Ich konnte es nun umsetzen! Danke schön!

          Gruss,

          Freezer

          Comment

          Working...
          X