Neues Thema starten

XML Reader

Hallo liebes Synesty Team,


zurzeit versuche ich, eine XML Datei über den XML-Reader einzulesen und in ein Spreadsheet umzuwandeln.


Soweit hat auch alles funktioniert, nur in einem Knoten bin ich auf der Suche nach einer effizienten Lösung:


Die Knotenstruktur der XML sieht wie folgt aus:
<Shop>
   <Hauptkategorie>
      <Kategorie>
          <Artikel>
              <XXX>
              <XXX>
              <XXX>
              <Merkmal>
                   <Merkmalschlüssel>
                   <Auspragüngsschlüssel>
                   <Merkmal>
                   <Ausprägung>
              </Merkmal>
              <Merkmal>
                   <Merkmalschlüssel>
                   <Auspragüngsschlüssel>
                   <Merkmal>
                   <Ausprägung>
              </Merkmal>
          </Artikel>
      </Kategorie>
   </Hauptkategorie>
</Shop>


Mein Problem ist, dass der Knoten "Merkmal"  mehrfach vorkommen kann und ich insgesamt ca. 500 verschiedene Merkmalschlüssel habe.
Die einzige Lösung, die ich jetzt gefunden habe, ist folgende:
<#list p["MERKMAL"] as t>
<#if t?has_content && t["MERKMALSCHLUESSEL"] == "EINB">
${row.addCol("Merkmalschlüssel Einsatzbereich", t["MERKMALSCHLUESSEL"])}
${row.addCol("Ausprägungsschlüssel Einsatzbereich", t["AUSPRAEGUNGSSCHLUESSEL"])}
${row.addCol("Merkmal Einsatzbereich", t["MERKMAL"])}
${row.addCol("Ausprägung Einsatzbereich", t["AUSPRAEGUNG"])}
</#if>
</#list>


Da müsste ich dann allerdings alle 493 Fälle abdecken, um keinen zu verpassen. Übersehe ich einen einfacheren Weg, über alle Merkmale zu iterieren und alle zu erfassen und auch für jedes die entsprechenden Spalten zu generieren?


Liebe Grüße

Lisa


Könntest du mal das Beispiel von oben komplett als XML posten (oder als Datei anhängen). Bitte mal eins, wo es mehrere Merkmale gibt.
Wir überlegen dann mal, wie man das machen könnte. 

Klar, siehe Anhang.


Freue mich auf eure Ideen :)


Viele Grüße

Lisa

XML
(19.2 MB)

Update: Wir haben die Lösung unten ein paar mal überarbeitet. Das was du evtl. in der Email-Benachrichtigung bekommen hast, war noch anders.



Probier mal hiermit:


Quelle (Beispiel Auszug:


<?xml version="1.0" encoding="UTF-8"?>
<ZEGSHOP>
  <DELETE>1</DELETE>
  <HAUPTKATEGORIE>
    <KATEGORIE>
      <ARTIKEL>
        <INTARTNR>22581</INTARTNR>
        <MERKMAL>
          <MERKMALSCHLUESSEL>FARB</MERKMALSCHLUESSEL>
          <AUSPRAEGUNGSSCHLUESSEL>SW</AUSPRAEGUNGSSCHLUESSEL>
          <MERKMAL>Farbe</MERKMAL>
          <AUSPRAEGUNG>schwarz</AUSPRAEGUNG>
        </MERKMAL>
        <MERKMAL>
          <MERKMALSCHLUESSEL>FARR</MERKMALSCHLUESSEL>
          <AUSPRAEGUNGSSCHLUESSEL>SW</AUSPRAEGUNGSSCHLUESSEL>
          <MERKMAL>Farbrichtung</MERKMAL>
          <AUSPRAEGUNG>schwarz</AUSPRAEGUNG>
        </MERKMAL>
        <MERKMAL>
          <MERKMALSCHLUESSEL>FUTI</MERKMALSCHLUESSEL>
          <AUSPRAEGUNGSSCHLUESSEL>FU200</AUSPRAEGUNGSSCHLUESSEL>
          <MERKMAL>Funktion</MERKMAL>
          <AUSPRAEGUNG>31</AUSPRAEGUNG>
        </MERKMAL>
      </ARTIKEL>
    </KATEGORIE>
  </HAUPTKATEGORIE>
</ZEGSHOP>


XML Parsing Code:


<#assign row = target.addRow()>
<#list xml["ZEGSHOP"]["HAUPTKATEGORIE"]["KATEGORIE"]["ARTIKEL"] as p>
  <#assign row = target.addRow()>
  <#-- ${addColumns(row, p, '', {'columns':['MERKMAL'], 'mode':'exclude'})} -->


<#list p["MERKMAL"] as t>
  ${row.addCol("Merkmalschlüssel-" + t["MERKMALSCHLUESSEL"], t["MERKMALSCHLUESSEL"])}
  ${row.addCol("Ausprägungsschlüssel- " + t["MERKMALSCHLUESSEL"], t["AUSPRAEGUNGSSCHLUESSEL"])}
  ${row.addCol("Merkmal- " + t["MERKMALSCHLUESSEL"], t["MERKMAL"])}
  ${row.addCol("Ausprägung- " + t["MERKMALSCHLUESSEL"], t["AUSPRAEGUNG"])}
</#list>

${addColumns(row, p, '', {'columns':['MERKMAL'], 'mode':'exclude'})}

</#list>


Ergebnis Vorschau:




Damit hast du erstmal die Merkmal im Spaltentitel so wie sie in der XML stehen und kannst damit weiterarbeiten. Falls es nicht das ist was du brauchst, gibt es dir aber vielleicht eine Idee.

Hallo!


Super, das hilft mir schonmal sehr vom Verständnis! Vielen Dank euch.


Ich hab allerdings immer noch das Problem, dass viele leere Spalten reingezogen werden und deshalb das Limit von 500 Spalten im Spreadsheet überschritten wird. Gibt es dafür eine sinnvolle Lösung?


Habe euch im Hild Radwelt Shop mal einen Support Mitarbeiter Account angelegt. 


Danke und viele Grüße

Lisa

Hmm du müsstest dann innerhalb der <#list> Schleife einen Check machen und die überlegen, was ein sinnvolles Filterkriterium wäre.

Müsstest mal die Datei prüfen, warum diese Spalten null sind. 


Einen Check, ob z.B. ein Tag leer ist wäre so hier:


<#if t["MERKMALSCHLUESSEL"]! != "">
  ${row.addCol() und so weiter}
</#if>


Damit werden z.B. nur Spalten hinzugefügt, wenn MERKMALSCHLUESSEL gefüllt ist. 


Wegen Support-Account: Sorry aber im kostenlosen Forensupport geben wir nur Hilfe zur Selbsthilfe und machen generell nichts in Kundenaccounts. Alles weitere wäre nur über Support-Ticket möglich. ,

Alles klar, dann probiere ich damit noch etwas herum. Danke!

Anmelden um einen Kommentar zu veröffentlichen