Announcement

Collapse
No announcement yet.

Gruppierung

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

  • Gruppierung

    Hallo zusammen,

    ich habe folgendes Problem: Ich möchte eine XML-Datei mittels XSLT in eine andere XML-Datei konvertieren. Hier Beispielhaft die Struktur einer Quell- und einer Zieldatei:

    Quelldatei:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <csvimport>
    	<row>
    		<Anlnr__UNR>615115_0</Anlnr__UNR>
    		<AKL>100</AKL>
    		<AKLB>Ueberschrift 1</AKLB>
    		<Beschreibung>Wunderschoener Text</Beschreibung>
    	</row>
    	<row>
    		<Anlnr__UNR>615116_0</Anlnr__UNR>
    		<AKL>100</AKL>
    		<AKLB>Ueberschrift 1</AKLB>
    		<Beschreibung>Noch ein netter Text</Beschreibung>
    	</row>
    	<row>
    		<Anlnr__UNR>615117_0</Anlnr__UNR>
    		<AKL>200</AKL>
    		<AKLB>Ueberschrift 2</AKLB>
    		<Beschreibung>Die Antwort lautet 42</Beschreibung>
    	</row>
    	<row>
    		<Anlnr__UNR>615118_0</Anlnr__UNR>
    		<AKL>300</AKL>
    		<AKLB>Ueberschrift 3</AKLB>
    		<Beschreibung>Ganz was tolles</Beschreibung>
    	</row>
    	</csvimport>
    Zieldatei:
    Code:
    <?xml version="1.0"?>
    <Catalog>
    	<Data>
    		<CatGroup>
    			<Key>100</Key>
    			<Desc>Ueberschrift 1</Desc>
    			<CatGroup>
    				<Key>615115_0</Key>
    				<Desc>Wunderschoener Text</Desc>
    			</CatGroup>
    			<CatGroup>
    				<Key>615116_0</Key>
    				<Desc>Noch ein netter Text</Desc>
    			</CatGroup>
    		</CatGroup>
    		<CatGroup>
    			<Key>200</Key>
    			<Desc>Ueberschrift 2</Desc>
    			<CatGroup>
    				<Key>615117_0</Key>
    				<Desc>Die Antwort lautet 42</Desc>
    			</CatGroup>
    		</CatGroup>
    		<CatGroup>
    			<Key>300</Key>
    			<Desc>Ueberschrift 3</Desc>
    			<CatGroup>
    				<Key>615118_0</Key>
    				<Desc>Ganz was tolles</Desc>
    			</CatGroup>
    		</CatGroup>
    	</Data>
    </Catalog>
    Für diese Gruppiererei habe ich mir schon die Muench-Methode angeschaut, jedoch blicke ich da nicht richtig durch.
    Hat von Euch vielleicht jemand einen guten Tip fuer mich?

    Besten Dank + Gruß
    Jens
    Zuletzt editiert von SWT; 05.07.2007, 16:49.

  • #2
    Versuche es mit XSLT 2.0 und xsl:for-each-group.

    Comment


    • #3
      Hallo Thomas,

      vielen Dank schon einmal für den Tip mit XSLT 2.0. Leider funktioniert die Gruppierung bei meinem Skript noch immer nicht so, wie ich es mir vorstelle. Gibt es irgendwo ein paar Beispiele, wie man das xsl:for-each-group so verwenden kann, dass es halbwegs auf mein Problem passt?

      Vielen Dank schon einmal!
      Jens

      Comment


      • #4
        Beschreibe mal das Problem etwas genauer. Das Gruppierungskriterium lautet offenbar AKL, aber nach welchem Schema soll weiter verfahren werden?

        Comment


        • #5
          Ich möchte nach AKL gruppieren. Darunter sollen dann alle Elemente aufgelistet werden (AKLB und Beschreibung), die das gleiche AKL haben. Folgenden Ansatz hätte ich anzubieten, der schon einmal die richtige Gruppierung durchführt.
          Leider wird immer nur das erste Unterelement aufgelistet und nicht alle mit dem gleichen AKL.

          Code:
          <xsl:template match="csvimport">
          	<xsl:for-each-group select="row" group-by="AKL">
          		<xsl:sort select="current-grouping-key()"/>
          		<Catgroup>
          			<Key>
          				<xsl:value-of select="AKL"/>
          			</Key>
          			<Desc>
          				<xsl:value-of select="AKLB"/>
          			</Desc>
          			<xsl:for-each select=".">
          				<Catgroup>
          					<Key>
          						<xsl:value-of select="Anlnr__UNR"/>
          					</Key>
          					<Desc>
          						<xsl:value-of select="Beschreibung"/>
          					</Desc>
          				</Catgroup>
          			</xsl:for-each>
          		</Catgroup>
          	</xsl:for-each-group>
          </xsl:template>
          Der Fehler liegt vermutlich an meinem for-each. Nur wie mache ich's nur richtig?

          Schonmal Danke!
          Zuletzt editiert von SWT; 06.07.2007, 13:39.

          Comment


          • #6
            Probiere es mal so:

            Code:
            <?xml version="1.0" encoding="ISO-8859-1"?>
            <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            
            <xsl:template match="csvimport">
            
            <Catalog>
              <Data>
            
              <xsl:for-each-group select="row" group-by="AKL">
                <xsl:sort select="current-grouping-key()"/>
            
                <CatGroup>
                  <Key><xsl:value-of select="AKL"/></Key>
                  <Desc><xsl:value-of select="AKLB"/></Desc>
            
                  <xsl:for-each select="current-group()">
                    <CatGroup>
                      <Key><xsl:value-of select="Anlnr__UNR"/></Key>
                      <Desc><xsl:value-of select="Beschreibung"/></Desc>
                    </CatGroup>    
                  </xsl:for-each>      
                </CatGroup>
               
               </xsl:for-each-group>
            
              </Data>
            </Catalog>
            
            </xsl:template>
            
            </xsl:stylesheet>

            Comment


            • #7
              Hallo Thomas,

              vielen Dank für Deine Hilfe. Jetzt hat alles geklappt und läuft soweit, wie ich es mir vorgestellt habe.

              Jens

              Comment

              Working...
              X