Hallo,
ich habe von einem Lieferanten die Produkte als Google Shopping Feed (XML) erhalten und suche eine Möglichkeit, die Produkte via PHP-Script und REST-API in den Shop zu importieren. Irgendwie finde ich keinen Ansatz, das XML-File vernünftig in ein PHP-Array einzulesen:
$path = "abc.xml";
$xmlfile = file_get_contents($path);
$new = simplexml_load_string($xmlfile);
$jsonfile = json_encode($new);
$myarray = json_decode($jsonfile, true);
print_r($myarray);
klappt bei „normalen“ XML-Files, aber bei Google-Shopping-Feeds nicht. Hat jemand einen Tip für mich?
Danke erstmal. Die Links zur allgm. Beschreibung, wie lese ich XML mit PHP, hatte ich auch gefunden. Mit den Standard-XML-Beispielen klappen die auch.
Bei den Google-Feeds stehen dann aber beispielsweise solche Einträge drin:
<title><![CDATA[Produkt XYZ ...]]></title>
Dies führt dazu, dass in den PHP-Arrays nichts mehr drinnen steht. Ich habe den Verdacht, dass dieses „CDATA“ etwas damit zutun hat?
Toll wäre, wenn jemand einen funktionierenden PHP-Schnipsel hat, mit dem man Google-Feeds einlesen kann. Irgendwie habe ich dazu so gar nichts gefunden.
Direkt auf die Shopwaredatenbank wird das nicht (so einfach) gehen.
Erstelle dir eine Temporäre Tabelle und lade dort erstmal alles rein.
Dann kannst du immer noch schauen und prüfen was in den Shop soll.
ich mache das ungefähr so:
$xmlFile = "krumm.xml";
$xmlNewFile = "glatt.xml";
$xmldata = simplexml_load_file($xmlFile) or die("Failed to load");
foreach ($xmldata->produkte as $productdetail) {
..hier kann man jetzt das XML glattbügeln falls nötig...
}
$xmldata->asXML($xmlNewFile);
anschliessend ein mySQL:
LOAD XML INFILE '$xmlNewFile' IGNORE INTO TABLE meinetemporäretabelle ROWS IDENTIFIED BY '<produkte>'
Habe jetzt folgende „teilweise“ Lösung gefunden:
$new = simplexml_load_string($xmlfile, null, LIBXML_NOCDATA);
Dadurch werden die CDATA-Tags plötzlich angezeigt. Es gibt aber noch Tags, die einen Doppelpunkt enthalten:
<g:gtin><![CDATA[4052229672694]]></g:gtin>
Das hat etwas mit NAMESPACES zutun. Weiß jemand, wie man die auch angezeigt bekommt?