1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Bereich Gruppieren

Dieses Thema im Forum "XML Technologien" wurde erstellt von lexmex_83, 28. August 2013.

  1. lexmex_83

    lexmex_83 Grünschnabel

    Hallo zusammen

    Bin auf ein neues Thema gestossen - Bereich Gruppieren, aber mit "spezialbedingungen"


    Ich habe eine XML (konvertiert aus einer CSV) wo so aussieht:

    Code (Text):
    1. <CSV>
    2.     <ORD number="5">
    3.         <A>AAAAAA</A>
    4.         <B>123</B>
    5.     </ORD>
    6.     <NAP number="6">
    7.         <A>123</A>
    8.         <B>123</B>
    9.     </NAP>
    10.     <NAS number="7">
    11.         <A>123</A>
    12.         <B>123</B>
    13.     </NAS>
    14.     <NAR number="8">
    15.         <A>123</A>
    16.         <B>123</B>
    17.     </NAR>
    18.     <ORI number="9">
    19.         <A>123</A>
    20.         <B>123</B>
    21.     </ORI>
    22.  
    23.  
    24.     <ORD number="10">
    25.         <A>BBBBBB</A>
    26.         <B>123</B>
    27.     </ORD>
    28.     <NAP number="11">
    29.         <A>123</A>
    30.         <B>123</B>
    31.     </NAP>
    32.     <NAS number="12">
    33.         <A>123</A>
    34.         <B>123</B>
    35.     </NAS>
    36.     <NAR number="13">
    37.         <A>123</A>
    38.         <B>123</B>
    39.     </NAR>
    40.     <ORI number="14">
    41.         <A>123</A>
    42.         <B>123</B>
    43.     </ORI>
    44.  
    45.  
    46.     <ORD number="15">
    47.         <A>CCCCCC</A>
    48.         <B>123</B>
    49.     </ORD>
    50.     <NAP number="16">
    51.         <A>123</A>
    52.         <B>123</B>
    53.     </NAP>
    54.     <NAS number="17">
    55.         <A>123</A>
    56.         <B>123</B>
    57.     </NAS>
    58.     <NAR number="18">
    59.         <A>123</A>
    60.         <B>123</B>
    61.     </NAR>
    62.     <ORI number="19">
    63.         <A>123</A>
    64.         <B>123</B>
    65.     </ORI>
    66. </CSV>
    Ich möchte nun ein XML ausgeben, wo eine Gruppierung nach "ORD" macht. D.h.

    In diesem Beispiel gibt es drei "ORD's". und pro ORD möchte ich eine Gruppe bilden. In der Gruppe je ORD sind alle nachfolgenden Tag's drinn, bis zum nächsten ORD.

    Kriegt man das hin irgendwie? Ich kenne nur das übliche "for each group":

    Code (Text):
    1. <xsl:for-each-group select="****" group-by="****" >
    2. <blabla></blabla>
    3. </xsl:for-each-group>

    Hatte jemand schon einen solchen Fall?


    Gruss
     
  2. Martin Honnen

    Martin Honnen Mitglied

    Benutze "group-starting-with":

    Code (Text):
    1. <xsl:template match="CSV">
    2.   <xsl:for-each-group select="*" group-starting-with="ORD">
    3.     <meine-gruppe>
    4.       <xsl:copy-of select="current-group()"/>
    5.     </meine-gruppe>
    6.   </xsl:for-each-group>
    7. </xsl:template>
     
  3. lexmex_83

    lexmex_83 Grünschnabel

    supper! genial! kann ich das dan in ein Template laden und aus diesem Template mit der erstellten Struktur weiterarbeiten?
     
  4. lexmex_83

    lexmex_83 Grünschnabel

    Ode einzelne Tags ausgeben wo die "current-group" betrifft?

    Hatte damit bis dato leider nichts zu tun...
     
  5. Martin Honnen

    Martin Honnen Mitglied

    Sicher, mit XSLT 2.0 (und for-each-group setzt ja einen XSLT 2.0-Prozessor voraus) kann man beliebig Strukturen speichern und weiterverarbeiten, etwa

    Code (Text):
    1. <xsl:template match="CSV">
    2.   <xsl:variable name="gruppen">
    3.     <xsl:for-each-group select="*" group-starting-with="ORD">
    4.      <meine-gruppe>
    5.        <xsl:copy-of select="current-group()"/>
    6.      </meine-gruppe>
    7.     </xsl:for-each-group>
    8.   </xsl:variable>
    9.   <xsl:apply-templates select="$gruppen/meine-gruppe"/>
    10. </xsl:template>
    11.  
    12. <xsl:template match="meine-gruppe">...</xsl:template>
    Nimm dir mal die Zeit, im Web existierende Beispiele wie http://www.w3.org/TR/xslt20/#grouping-examples zu lesen und nachzuvollziehen, dann fällt die Benutzung von "for-each-group" auch leichter.
     
  6. lexmex_83

    lexmex_83 Grünschnabel

    Danke! Hat mir sehr geholfen!
     
Die Seite wird geladen...