PHP XML Ausgabe direkt als CSV abspeichern

Messa

Lt. Junior Grade
Registriert
Sep. 2009
Beiträge
398
Ich hab ein kleines PHP Tool geschrieben womit ich mir Daten über eine API aus der Datenbank vom meinem Großhändler ziehen kann. Es funktioniert soweit auch ganz gut, ich erhalte immer eine XML Datei im neuen Fenster. Nun zum Problem: Ich muss bisher die XML per Hand abspeichern, auf den Server legen und dann mittels einem kleinen PHP-Script es als CSV ausgeben.

Diese Schritt würde ich gern vereinfachen, indem er gleich nach dem XML schreiben allein eine CSV Datei abspeichert. Jemand ne Idee? Danke.
 
Schreib die Ausgabe doch einfach in eine Datei die du als CSV speicherst.

fopen(); und fclose();
 
Versuch ich ja, aber bekomm ich irgendwie nicht hin :/

Das hier ist mein Script zur Ausgabe als CSV:
PHP:
<?php
$file='test2.xml';
if (file_exists($file)) {
    $xml = simplexml_load_file($file);
    $f = fopen('test2.csv', 'w');
    // array to hold the field names
    $headers = array(); 
    // loop through the first set of fields to get names
    foreach ($xml->artikel->children() as $field) { 
        // put the field name into array
        $headers[] = $field->getName(); 
    }
    // print headers to CSV
    fputcsv($f, $headers, ',', '"');
    foreach ($xml->artikel as $artikel) {
        fputcsv($f, get_object_vars($artikel), ',', '"');
    }
    fclose($f);
}
?>
 
Wie sieht denn die XML Datei aus?

Wenn sie so ausschauen sollte, dann funktioniert dein Skript.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<artikelliste>
    <artikel>
        <nummer>3453</nummer>
        <name>Apfelsaft</name>
        <preis>0,30</preis>
    </artikel>
    <artikel>
        <nummer>524</nummer>
        <name>Kaugummi</name>
        <preis>1,00</preis>
    </artikel>
</artikelliste>
Code:
nummer,name,preis
3453,Apfelsaft,"0,30"
524,Kaugummi,"1,00"
 
Ja, funktioniert ja so wunderbar ;) Danke. Nur will ich das direkt im Code machen und nicht extra es als xml per Hand speichern und dann das zweite Script laufen lassen.
 
Hachja, wer lesen kann... :D

Wie sieht denn das Skript fuer den API Abruf aus?
Eigentlich braeuchtest du doch nur das Skript welches die Daten laedt mit dem CSV Skript kombinieren.

  1. API abrufen
  2. Daten als XML speichern (ggf. mit Datum oder so)
  3. Nach CSV umwandlen (ggf. auch mit Datum oder so, damit man beide Dateien zuordnen kann)
 
Hier der Code der ausgegeben wird:
PHP:
header('Content-Type: text/xml; charset=iso-8859-1');
	echo $Api->Respond;
	exit();

Im Respond sind halt die XML Anweisungen. Danke.
 
PHP:
$file='test2.xml';

$response = $Api->Respond;
file_put_contents($file, $response);

if (file_exists($file)) {
// ... rest vom CSV Skript
 
Danke, werde ich morgen mal testen ;)
 
Zurück
Oben