XML zerlegen und bestimmte Felder speichern als CSV

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML zerlegen und bestimmte Felder speichern als CSV

    Mahlzeit zusammen!

    Hab da ein kleineres Problem und komm einfach nicht weiter...

    Ich habe eine XML Datei mit Artikeldaten vorliegen (also praktisch nen Katalog). Aus dieser XML Datei würde ich gerne zwei Felder in eine CSV-Datei speichern. Das Feld "SUPPLIER_AID" sowie "DESCRIPTION_LONG" soll in die CSV-Datei im Format "SUPPLIER_AID;DESCRIPTION_LONG".

    Erschwerend hinzu kommt, daß DESCRIPTION_LONG über mehrere Zeilen gehen kann (da müssen also Zeilenumbrüche mit drin sein) und das DESCRIPTION_LONG nicht für jede Artikel-Nummer (SUPPLIER_AID) vorhanden ist.

    Hat einer von euch ne Idee wie ich das mit der Speicherung als CSV hinbekommen kann? Irgendwie ist mein PHP-Horizont dafür scheinbar noch zu begrenzt.

    Danke...


    Gruß

    Markus

  • #2
    Da gibt es zwei Möglichkeiten: Entweder per PHP in ein Array umwandeln lassen und dann die entsprechenden Felder als CSV speichern, oder aber die XML-Datei per XSLT im CSV-Format darstellen lassen und per PHP auslesen und speichern / bzw. direkt die XML-Datei im Browser aufrufen.
    Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
    www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
    [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

    Kommentar


    • #3
      Danke für die Tips!

      Hab es in der Zwischenzeit aber schon anders gelöst. Ist vielleicht nicht die optimale Lösung... aber für meine Zwecke reicht es.

      Für die, die es interessiert:

      PHP-Code:
      <?php

      set_time_limit
      (1200);

      $text implode(''file('export.xml'));
      $data explode('<ARTICLE>'$text);
      $out fopen('export.txt''w');
      foreach(
      $data as $d)
      {
        
      preg_match_all('%<(.*?)>(.*?)</\1>%'$d$matches);
        
      fputs ($outimplode(';'$matches[0]). "\n");
      }

      fclose($out);

      $lesen fopen('export.txt''r');
      $schreiben fopen('daten.txt''w');

      while (!
      feof($lesen))
      {
       
      $zeile fgets ($lesen1024);
       
      $fragment explode (";"$zeile);

       
      $counter=0;

       while (
      $fragment[$counter]<>"")
       {
           if (
      preg_match("/<SUPPLIER_AID>/i"$fragment[$counter]))
           {
               
      $artikelnummer=$fragment[$counter];
           }

              if (
      preg_match("/<DESCRIPTION_LONG>/i"$fragment[$counter]))
              {
                  
      $beschreibung=$fragment[$counter];
              }

              
      $counter++;
       }

       
      $art=str_replace("<SUPPLIER_AID>"""$artikelnummer);
       
      $art2=str_replace("</SUPPLIER_AID>"""$art);

       
      $bes=str_replace("<DESCRIPTION_LONG>"""$beschreibung);
       
      $bes2=str_replace("</DESCRIPTION_LONG>"""$bes);

       if (
      $bes2=="")
       { }
       else
       {
         
      fputs ($schreiben$art2.";".$bes2."\n");
       }

       
      $artikelnummer="";
       
      $beschreibung="";
       
       
      $art2="";
       
      $bes2="";

      }

      echo 
      "Alles erledigt.";

      fclose ($lesen);
      fclose ($schreiben);

      ?>

      Verbesserungsvorschläge sind natürlich willkommen...


      Gruß

      Markus

      Kommentar

      Lädt...
      X