Announcement

Collapse
No announcement yet.

XML konvertieren: Daten aus Knoten zusammenfassen und Gruppieren

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

  • XML konvertieren: Daten aus Knoten zusammenfassen und Gruppieren

    Hallo,

    meine ersten Fragen wurden excellent beantwortet, so dass ich mich mit einem "großen Fragenkorb" hier an das Forum wende:

    Hintergrund: eine XLM aus einem WaWi muss für den Import in Indesign aufbereitet werden. Leider sind die Einstellungend der Ausgabe per WaWi recht schmalbrüstig.

    Im Ausgabe-XML sollen folgende Merkmale vorhanden sein:

    * neuer Tag IMAGE mit Link zu Bild (Bildname mit ARTBESCHREIBUNG) => o.k. geht

    * Umrechnung Netto VKPREIS1 zu Brutto VKPREIS1B mit USTSATZ = 01 als 19% und 02 als 7% => o.k. geht

    was fehlt:

    1.) das WaWi gibt die Produkt-Attribute als "gleichberechtigte" Produkte aus - z.B. bei unterschiedlichen Packungsgrößen; aus den Knoten der "Attribute" müssen "Preis" VKPREIS1B und Anzahl EINHEIT als Tags in das Haupt-Produkt. Die Attribut-Produkte können anschließend weg...

    Beim Hauptprodukt ist der Tag ARTNR und ARTBESCHREIBUNG identisch - bei Attributen hat ARTNR einen Strich und Nummer angehängt (z.B. G392873-4)

    2.) die Knoten der Produkte haben eine Kennung für die Produktkategorie als Tag HERSTELLERNUMMER - es muss eine Gruppierung und eine Sortierung der Produkte (der übrig gebliebenen Haupt-Produkte) erfolgen:

    2.a) Die Produkte müssen nach einem vorgegebenem Schema (Liste kommt "per Hand") für die HERSTELLERNUMMER gruppiert werden z.B. HERSTELLERNUMMER 349, 350, 323, 400, 234, 600 und

    2.b) alle Produkte einer HERSTELLERNUMMER müssen nach SUCHBEGRIFF alphabetisch sortiert werden

    uff... hier mal was als Beispiel

    ....
    zu lang: Daten auf nächstem Posting

  • #2
    weiter:

    Eingabe-XML

    Code:
    <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    
    <!-- 
    USTSATZ 01 == 19%
    USTSATZ 02 == 07%
    
    Hauptartikel: ARTNR == ARTBESCHREIBUNG
    Attribut-Artikel: ARTNR-n (mit n = 1,2,3...)
    -->  
    
    <EXPORTDATA>
      <DATASET>
        <RECORD>
          <ARTNR>G21730</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Innocent Lady&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Innocent Lady, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21730</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, weiße, gefüllte Blüten.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: weiß</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 75 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
          <EINHEIT>2 Stück</EINHEIT>
          <VKPREIS1>4,30</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21730-2</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Innocent Lady&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Innocent Lady, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21730</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, weiße, gefüllte Blüten.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: weiß</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 75 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
          <EINHEIT>2 Stück</EINHEIT>
          <VKPREIS1>4,30</VKPREIS1>
          <USTSATZ>01</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21730-6</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Innocent Lady&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Innocent Lady, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21730</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, weiße, gefüllte Blüten.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: weiß</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 75 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
          <EINHEIT>6 Stück</EINHEIT>
          <VKPREIS1>11,64</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21732</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Magic Star&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Magic Star, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21732</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, rosa gefüllte Blüten mit dunklerer Mittelrippe.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: rosa</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 90 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
          <EINHEIT>2 Stück</EINHEIT>
          <VKPREIS1>4,30</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21732-2</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Magic Star&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Magic Star, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21732</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, rosa gefüllte Blüten mit dunklerer Mittelrippe.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: rosa</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 90 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
          <EINHEIT>2 Stück</EINHEIT>
          <VKPREIS1>4,30</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21732-6</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Magic Star&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Magic Star, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21732</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, rosa gefüllte Blüten mit dunklerer Mittelrippe.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: rosa</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 90 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
          <EINHEIT>6 Stück</EINHEIT>
          <VKPREIS1>11,64</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21723</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Sheherazade&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Sheherazade,  Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21723</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01>elite</FLD01>
          <FLD02>Orientalische Hybride. Große, braunrote Blüten mit cremgelben Rand und Schlund.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: braunrot, cremegelber Rand</FLD04>
          <FLD05>Gr. 16/18</FLD05>
          <FLD06>Höhe: 120 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
          <EINHEIT>2 Stück</EINHEIT>
          <VKPREIS1>3,13</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21723-2</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Sheherazade&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Sheherazade,  Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21723</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01>elite</FLD01>
          <FLD02>Orientalische Hybride. Große, braunrote Blüten mit cremgelben Rand und Schlund.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: braunrot, cremegelber Rand</FLD04>
          <FLD05>Gr. 16/18</FLD05>
          <FLD06>Höhe: 120 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
          <EINHEIT>2 Stück</EINHEIT>
          <VKPREIS1>3,13</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21723-6</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Sheherazade&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Sheherazade,  Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21723</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01>elite</FLD01>
          <FLD02>Orientalische Hybride. Große, braunrote Blüten mit cremgelben Rand und Schlund.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: braunrot, cremegelber Rand</FLD04>
          <FLD05>Gr. 16/18</FLD05>
          <FLD06>Höhe: 120 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
          <EINHEIT>6 Stück</EINHEIT>
          <VKPREIS1>8,41</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21733</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Soft Music&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Sofr Music, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21733</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, rosafarbene, gefüllte Blüten mit etwas hellerer Mitte.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: rosa</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 90 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
          <EINHEIT>2 Stück</EINHEIT>
          <VKPREIS1>4,30</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21733-2</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Soft Music&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Sofr Music, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21733</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, rosafarbene, gefüllte Blüten mit etwas hellerer Mitte.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: rosa</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 90 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
          <EINHEIT>2 Stück</EINHEIT>
          <VKPREIS1>4,30</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
        <RECORD>
          <ARTNR>G21733-6</ARTNR>
          <SUCHBEGRIFF>Lilium &quot;Soft Music&quot;</SUCHBEGRIFF>
          <SUCHBEGRIFF2>Sofr Music, Lilien Orient.Hybr.</SUCHBEGRIFF2>
          <ARTBESCHREIBUNG>G21733</ARTBESCHREIBUNG>
          <EANNUMMER></EANNUMMER>
          <FLD01></FLD01>
          <FLD02>Gefüllt blühende orientalische Hybride. Große, rosafarbene, gefüllte Blüten mit etwas hellerer Mitte.</FLD02>
          <FLD03>Feb. bis April</FLD03>
          <FLD04>Farbe: rosa</FLD04>
          <FLD05>Gr. 14/16</FLD05>
          <FLD06>Höhe: 90 cm</FLD06>
          <FLD07>Blüte: Juli</FLD07>
          <FLD08>ja</FLD08>
          <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
          <EINHEIT>6 Stück</EINHEIT>
          <VKPREIS1>11,64</VKPREIS1>
          <USTSATZ>02</USTSATZ>
          <WG>Frühjahrsblumenzwiebeln</WG>
        </RECORD>
      </DATASET>
    </EXPORTDATA>

    Comment


    • #3
      Nummer 3:

      meine (bisherige) XSL...
      Code:
      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      	
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
      
        <xsl:template match="@* | node()">
          <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
          </xsl:copy>
        </xsl:template>
      
      	<!-- Bildlink-Items einfügen... -->
        <xsl:template match="ARTBESCHREIBUNG">
          <xsl:copy-of select="."/>
          <IMAGE href="file:///Export_Bilder/{.}.jpg"/>
        </xsl:template>
        
      	<!-- Brutto-Endpreis einfügen... />-->
        <xsl:template match="VKPREIS1">
          <xsl:copy-of select="."/>
          
          <xsl:choose>
      	    <xsl:when test="../USTSATZ='01'">
      	    	<VKPREIS1B><xsl:value-of select="translate(format-number(number(translate(.,',','.')) * 1.19, '###.00'),'.',',')"/></VKPREIS1B>
      	    </xsl:when>    	
      	    <xsl:when test="../USTSATZ='02'">
      	    	<VKPREIS1B><xsl:value-of select="translate(format-number(number(translate(.,',','.')) * 1.07, '###.00'),'.',',')"/></VKPREIS1B>
      	    </xsl:when>
      	    <xsl:otherwise><VKPREIS1B>***,**</VKPREIS1B></xsl:otherwise>
          </xsl:choose>
          
        </xsl:template>  
      
      </xsl:stylesheet>
      und so könnte die Ausgabe-XML aussehen... (Bruttopreise nicht nachgerechnet)
      Code:
      <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
      
      <EXPORTDATA>
        <DATASET>
          <RECORD>
            <ARTNR>G21730</ARTNR>
            <SUCHBEGRIFF>Lilium &quot;Innocent Lady&quot;</SUCHBEGRIFF>
            <SUCHBEGRIFF2>Innocent Lady, Lilien Orient.Hybr.</SUCHBEGRIFF2>
            <ARTBESCHREIBUNG>G21730</ARTBESCHREIBUNG>
            <EANNUMMER></EANNUMMER>
            <FLD01></FLD01>
            <FLD02>Gefüllt blühende orientalische Hybride. Große, weiße, gefüllte Blüten.</FLD02>
            <FLD03>Feb. bis April</FLD03>
            <FLD04>Farbe: weiß</FLD04>
            <FLD05>Gr. 14/16</FLD05>
            <FLD06>Höhe: 75 cm</FLD06>
            <FLD07>Blüte: Juli</FLD07>
            <FLD08>ja</FLD08>
            <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
            <EINHEIT>2 Stück</EINHEIT>
            <VKPREIS1>4,30</VKPREIS1>
            <VKPREIS1B>5,10</VKPREIS1B>
            <USTSATZ>02</USTSATZ>
            <EINHEIT2>6 Stück</EINHEIT2>
            <VKPREIS2B>13,10</VKPREIS2B>
            <WG>Frühjahrsblumenzwiebeln</WG>
          </RECORD>
          <RECORD>
            <ARTNR>G21732</ARTNR>
            <SUCHBEGRIFF>Lilium &quot;Magic Star&quot;</SUCHBEGRIFF>
            <SUCHBEGRIFF2>Magic Star, Lilien Orient.Hybr.</SUCHBEGRIFF2>
            <ARTBESCHREIBUNG>G21732</ARTBESCHREIBUNG>
            <EANNUMMER></EANNUMMER>
            <FLD01></FLD01>
            <FLD02>Gefüllt blühende orientalische Hybride. Große, rosa gefüllte Blüten mit dunklerer Mittelrippe.</FLD02>
            <FLD03>Feb. bis April</FLD03>
            <FLD04>Farbe: rosa</FLD04>
            <FLD05>Gr. 14/16</FLD05>
            <FLD06>Höhe: 90 cm</FLD06>
            <FLD07>Blüte: Juli</FLD07>
            <FLD08>ja</FLD08>
            <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
            <EINHEIT>2 Stück</EINHEIT>
            <VKPREIS1>4,30</VKPREIS1>
            <VKPREIS1B>5,10</VKPREIS1B>
            <USTSATZ>02</USTSATZ>
            <EINHEIT2>6 Stück</EINHEIT2>
            <VKPREIS2B>13,10</VKPREIS2B>      
            <WG>Frühjahrsblumenzwiebeln</WG>
          </RECORD>
          <RECORD>
            <ARTNR>G21723</ARTNR>
            <SUCHBEGRIFF>Lilium &quot;Sheherazade&quot;</SUCHBEGRIFF>
            <SUCHBEGRIFF2>Sheherazade,  Lilien Orient.Hybr.</SUCHBEGRIFF2>
            <ARTBESCHREIBUNG>G21723</ARTBESCHREIBUNG>
            <EANNUMMER></EANNUMMER>
            <FLD01>elite</FLD01>
            <FLD02>Orientalische Hybride. Große, braunrote Blüten mit cremgelben Rand und Schlund.</FLD02>
            <FLD03>Feb. bis April</FLD03>
            <FLD04>Farbe: braunrot, cremegelber Rand</FLD04>
            <FLD05>Gr. 16/18</FLD05>
            <FLD06>Höhe: 120 cm</FLD06>
            <FLD07>Blüte: Juli</FLD07>
            <FLD08>ja</FLD08>
            <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
            <EINHEIT>2 Stück</EINHEIT>
            <VKPREIS1>3,13</VKPREIS1>
            <VKPREIS1B>4,40</VKPREIS1B>
            <USTSATZ>02</USTSATZ>
            <EINHEIT2>6 Stück</EINHEIT2>
            <VKPREIS2B>13,10</VKPREIS2B>          
            <WG>Frühjahrsblumenzwiebeln</WG>
          </RECORD>
       		... usw.
        </DATASET>
      </EXPORTDATA>
      Dank und Gruss

      Comment


      • #4
        Teile uns zuerst mal mit, ob du XSLT 2.0 benutzen kannst und willst, um die Transformationen durchzuführen. XSLT 2.0 gibt es seit 2007 und es wird inzwischen mit Prozessoren wie Saxon 9, AltovaXML, XQSharp gut unterstützt. Mit XSLT 2.0 lassen sich Aufgaben wie Gruppieren und Sortieren kompakter, einfacher und effizienter lösen.
        Ansonsten willst du offensichtlich eine Vielzahl von Transformationsschritten durchführen, da empfiehlt es sich unter Umständen, für jeden Schritt ein Stylesheet zu schreiben, und diese in einer Art Pipeline anzuwenden.

        Comment


        • #5
          Hallo,

          die Infos zum Prozessor sind da nicht so eindeutig - wahrscheinlich eher 1.0

          Es wäre aber auch kein Problem, ein anderes Programm davor zu spannen.

          Gruss

          Comment


          • #6
            Eine Frage zu
            1.) das WaWi gibt die Produkt-Attribute als "gleichberechtigte" Produkte aus - z.B. bei unterschiedlichen Packungsgrößen; aus den Knoten der "Attribute" müssen "Preis" VKPREIS1B und Anzahl EINHEIT als Tags in das Haupt-Produkt. Die Attribut-Produkte können anschließend weg...

            Beim Hauptprodukt ist der Tag ARTNR und ARTBESCHREIBUNG identisch - bei Attributen hat ARTNR einen Strich und Nummer angehängt (z.B. G392873-4)
            Woraus ergeben sich die Elementnamen? Im Beispielresultat tauchen "EINHEIT2" und "VKPREIS2B" auf, stammt dabei die Ziffer (also 2) im Namen aus der ARTNR (also der 2 hinter dem Bindestrich in G21730-2) oder ist das eine laufende Nummer oder woher soll die Ziffer genommen werden?

            Comment


            • #7
              Ich habe mal mit XSLT 2.0 versucht, die verschiedenen von dir beschriebenen Schritte per Anwendung von "mode"s umzusetzen:
              Code:
              <xsl:stylesheet
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:mf="http://example.com/mf"
                exclude-result-prefixes="xs mf"
                version="2.0">
                
                <xsl:param 
                   name="ust1"
                   as="xs:double"
                   select="1.19" />
                   
                <xsl:param 
                   name="ust2"
                   as="xs:double"
                   select="1.07" />
                
                <xsl:param
                   name="image-path"
                   as="xs:string"
                   select="'file:///Export_Bilder/'"/>
                
                <xsl:param name="list" as="xs:string*" select="'349, 350, 323, 400, 234, 600'"/>
                
                <xsl:decimal-format
                  name="df1"
                  decimal-separator=","
                  grouping-separator="."/>
                  
                <xsl:output indent="yes"/>
                <xsl:strip-space elements="*"/>
                
                <xsl:template match="/">
                  <xsl:variable name="temp1">
                    <xsl:apply-templates mode="m1"/>
                  </xsl:variable>
                  <!-- 
                    <debug>
                      <xsl:copy-of select="temp1"/>
                    </debug>
                  -->
                  <xsl:variable name="temp2">
                    <xsl:apply-templates select="$temp1/node()" mode="m2"/>
                  </xsl:variable>
                  <!--
                    <debug>
                      <xsl:copy-of select="$temp2"/>
                    </debug>
                  -->
                  <xsl:apply-templates select="$temp2/node()" mode="m3"/>
                </xsl:template>
                
                <!-- identity -->
                <xsl:template match="@* | node()" mode="#all">
                  <xsl:copy>
                    <xsl:apply-templates select="@* , node()" mode="#current"/>
                  </xsl:copy>
                </xsl:template>
                
                <!-- mode m1
                     adds IMAGE afer ARTBESCHREIBUNG and
                     computes VKPREIS1B -->
                <xsl:template match="ARTBESCHREIBUNG" mode="m1">
                  <xsl:next-match/>
                  <IMAGE href="{$image-path}{.}.jpg"/>
                </xsl:template>
                
                <xsl:template match="RECORD[USTSATZ = '01']/VKPREIS1" mode="m1">
                  <xsl:next-match/>
                  <xsl:apply-templates select="." mode="m1-add">
                    <xsl:with-param name="ust" select="$ust1"/>
                  </xsl:apply-templates>
                </xsl:template>
              
                <xsl:template match="RECORD[USTSATZ = '02']/VKPREIS1" mode="m1">
                  <xsl:next-match/>
                  <xsl:apply-templates select="." mode="m1-add">
                    <xsl:with-param name="ust" select="$ust2"/>
                  </xsl:apply-templates>
                </xsl:template>
                
                <xsl:template match="RECORD[not(USTSATZ = ('01', '02'))]/VKPREIS1" mode="m1-add">
                  <xsl:next-match/>
                  <VKPREIS1B>***,**</VKPREIS1B>
                </xsl:template>
                
                <xsl:template match="RECORD[USTSATZ]/VKPREIS1" mode="m1-add">
                  <xsl:param name="ust" as="xs:double"/>
              	  <VKPREIS1B>
              	    <xsl:value-of select="format-number(number(translate(.,',','.')) * $ust, '###,00', 'df1')"/>
              	  </VKPREIS1B>
              	</xsl:template>
              	
              	<!-- mode m2
              	     groups by main ARTNR
              	     and injects prices of grouped records into main record
              	-->
                
                <xsl:template match="DATASET" mode="m2">
                  <xsl:copy>
                    <xsl:for-each-group select="RECORD" group-by="tokenize(ARTNR, '-')[1]">
                      <xsl:apply-templates select="current-group()[ARTNR = current-grouping-key()]" mode="m2"/>
                    </xsl:for-each-group>
                  </xsl:copy>
                </xsl:template>
                
                <xsl:template match="RECORD" mode="m2">
                  <xsl:copy>
                    <xsl:apply-templates select="* except WG" mode="m2"/>
                    <xsl:apply-templates select="(current-group() except current())/EINHEIT" mode="m2-inject"/>
                    <xsl:apply-templates select="WG" mode="m2"/>
                  </xsl:copy>
                </xsl:template>
                
                <xsl:template match="RECORD/EINHEIT" mode="m2-inject">
                  <xsl:element name="{name()}{position() + 1}">
                    <xsl:value-of select="."/>
                  </xsl:element>
                  <xsl:element name="VKPREIS{position() + 1}B">
                    <xsl:value-of select="../VKPREIS1B"/>
                  </xsl:element>
                </xsl:template>
                
                <!-- mode m3
                     group by HERSTELLERNUMMER
                     and sort groups by SUCHBEGRIFF
                -->
                
                <xsl:template match="DATASET" mode="m3">
                  <xsl:copy>
                    <xsl:for-each-group select="RECORD" group-by="HERSTELLERNUMMER">
                      <xsl:apply-templates select="current-group()" mode="#current">
                        <xsl:sort select="SUCHBEGRIFF"/>
                      </xsl:apply-templates>
                    </xsl:for-each-group>
                  </xsl:copy>
                </xsl:template>
                
              </xsl:stylesheet>
              Das macht aus deinem Beispieldokument dann
              Code:
              <?xml version="1.0" encoding="UTF-8"?>
              <!-- 
              USTSATZ 01 == 19%
              USTSATZ 02 == 07%
              
              Hauptartikel: ARTNR == ARTBESCHREIBUNG
              Attribut-Artikel: ARTNR-n (mit n = 1,2,3...)
              --><EXPORTDATA>
                 <DATASET>
                    <RECORD>
                       <ARTNR>G21730</ARTNR>
                       <SUCHBEGRIFF>Lilium "Innocent Lady"</SUCHBEGRIFF>
                       <SUCHBEGRIFF2>Innocent Lady, Lilien Orient.Hybr.</SUCHBEGRIFF2>
                       <ARTBESCHREIBUNG>G21730</ARTBESCHREIBUNG>
                       <IMAGE href="file:///Export_Bilder/G21730.jpg"/>
                       <EANNUMMER/>
                       <FLD01/>
                       <FLD02>Gefüllt blühende orientalische Hybride. Große, weiße, gefüllte Blüten.</FLD02>
                       <FLD03>Feb. bis April</FLD03>
                       <FLD04>Farbe: weiß</FLD04>
                       <FLD05>Gr. 14/16</FLD05>
                       <FLD06>Höhe: 75 cm</FLD06>
                       <FLD07>Blüte: Juli</FLD07>
                       <FLD08>ja</FLD08>
                       <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
                       <EINHEIT>2 Stück</EINHEIT>
                       <VKPREIS1>4,30</VKPREIS1>
                       <VKPREIS1B>4,60</VKPREIS1B>
                       <USTSATZ>02</USTSATZ>
                       <EINHEIT2>2 Stück</EINHEIT2>
                       <VKPREIS2B>5,12</VKPREIS2B>
                       <EINHEIT3>6 Stück</EINHEIT3>
                       <VKPREIS3B>12,45</VKPREIS3B>
                       <WG>Frühjahrsblumenzwiebeln</WG>
                    </RECORD>
                    <RECORD>
                       <ARTNR>G21732</ARTNR>
                       <SUCHBEGRIFF>Lilium "Magic Star"</SUCHBEGRIFF>
                       <SUCHBEGRIFF2>Magic Star, Lilien Orient.Hybr.</SUCHBEGRIFF2>
                       <ARTBESCHREIBUNG>G21732</ARTBESCHREIBUNG>
                       <IMAGE href="file:///Export_Bilder/G21732.jpg"/>
                       <EANNUMMER/>
                       <FLD01/>
                       <FLD02>Gefüllt blühende orientalische Hybride. Große, rosa gefüllte Blüten mit dunklerer Mittelrippe.</FLD02>
                       <FLD03>Feb. bis April</FLD03>
                       <FLD04>Farbe: rosa</FLD04>
                       <FLD05>Gr. 14/16</FLD05>
                       <FLD06>Höhe: 90 cm</FLD06>
                       <FLD07>Blüte: Juli</FLD07>
                       <FLD08>ja</FLD08>
                       <HERSTELLERNUMMER>400</HERSTELLERNUMMER>
                       <EINHEIT>2 Stück</EINHEIT>
                       <VKPREIS1>4,30</VKPREIS1>
                       <VKPREIS1B>4,60</VKPREIS1B>
                       <USTSATZ>02</USTSATZ>
                       <EINHEIT2>2 Stück</EINHEIT2>
                       <VKPREIS2B>4,60</VKPREIS2B>
                       <EINHEIT3>6 Stück</EINHEIT3>
                       <VKPREIS3B>12,45</VKPREIS3B>
                       <WG>Frühjahrsblumenzwiebeln</WG>
                    </RECORD>
                    <RECORD>
                       <ARTNR>G21723</ARTNR>
                       <SUCHBEGRIFF>Lilium "Sheherazade"</SUCHBEGRIFF>
                       <SUCHBEGRIFF2>Sheherazade,  Lilien Orient.Hybr.</SUCHBEGRIFF2>
                       <ARTBESCHREIBUNG>G21723</ARTBESCHREIBUNG>
                       <IMAGE href="file:///Export_Bilder/G21723.jpg"/>
                       <EANNUMMER/>
                       <FLD01>elite</FLD01>
                       <FLD02>Orientalische Hybride. Große, braunrote Blüten mit cremgelben Rand und Schlund.</FLD02>
                       <FLD03>Feb. bis April</FLD03>
                       <FLD04>Farbe: braunrot, cremegelber Rand</FLD04>
                       <FLD05>Gr. 16/18</FLD05>
                       <FLD06>Höhe: 120 cm</FLD06>
                       <FLD07>Blüte: Juli</FLD07>
                       <FLD08>ja</FLD08>
                       <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
                       <EINHEIT>2 Stück</EINHEIT>
                       <VKPREIS1>3,13</VKPREIS1>
                       <VKPREIS1B>3,35</VKPREIS1B>
                       <USTSATZ>02</USTSATZ>
                       <EINHEIT2>2 Stück</EINHEIT2>
                       <VKPREIS2B>3,35</VKPREIS2B>
                       <EINHEIT3>6 Stück</EINHEIT3>
                       <VKPREIS3B>9,00</VKPREIS3B>
                       <WG>Frühjahrsblumenzwiebeln</WG>
                    </RECORD>
                    <RECORD>
                       <ARTNR>G21733</ARTNR>
                       <SUCHBEGRIFF>Lilium "Soft Music"</SUCHBEGRIFF>
                       <SUCHBEGRIFF2>Sofr Music, Lilien Orient.Hybr.</SUCHBEGRIFF2>
                       <ARTBESCHREIBUNG>G21733</ARTBESCHREIBUNG>
                       <IMAGE href="file:///Export_Bilder/G21733.jpg"/>
                       <EANNUMMER/>
                       <FLD01/>
                       <FLD02>Gefüllt blühende orientalische Hybride. Große, rosafarbene, gefüllte Blüten mit etwas hellerer Mitte.</FLD02>
                       <FLD03>Feb. bis April</FLD03>
                       <FLD04>Farbe: rosa</FLD04>
                       <FLD05>Gr. 14/16</FLD05>
                       <FLD06>Höhe: 90 cm</FLD06>
                       <FLD07>Blüte: Juli</FLD07>
                       <FLD08>ja</FLD08>
                       <HERSTELLERNUMMER>300</HERSTELLERNUMMER>
                       <EINHEIT>2 Stück</EINHEIT>
                       <VKPREIS1>4,30</VKPREIS1>
                       <VKPREIS1B>4,60</VKPREIS1B>
                       <USTSATZ>02</USTSATZ>
                       <EINHEIT2>2 Stück</EINHEIT2>
                       <VKPREIS2B>4,60</VKPREIS2B>
                       <EINHEIT3>6 Stück</EINHEIT3>
                       <VKPREIS3B>12,45</VKPREIS3B>
                       <WG>Frühjahrsblumenzwiebeln</WG>
                    </RECORD>
                 </DATASET>
              </EXPORTDATA>
              Der dritte Schritt gruppiert und sortiert allerdings einfach die existieren "RECORD"-Elemente, was mit
              Die Produkte müssen nach einem vorgegebenem Schema (Liste kommt "per Hand") für die HERSTELLERNUMMER gruppiert werden z.B. HERSTELLERNUMMER 349, 350, 323, 400, 234, 600
              ist mir bisher nicht klar, im Beispieleingabedokument gibt es zwei Herstellernummern, und zwar 300 und 400, nur die 400 findet sich ja in der Liste, wohin soll denn dann die 300 "gruppiert" gruppiert werden, zur nächsten Zahl, also 349?

              Comment

              Working...
              X