2009-03-12 7 views
0

Ein Anbieter wird mir über einen httppost ein xml an ein Skript schicken, das ich machen werde. Das Skript, wenn ich den httppost erhalte, muss ich irgendwie die Daten von der XML holen und sie in meine Datenbank setzen.Wie bekomme ich Daten von XML, die über http-Post an mein Skript gesendet werden?

Ich habe Erfahrung mit allen 3, PHP MYSQL und XML. Ich weiß, wie man Werte aus XML mit E4X bekommt, aber ich weiß nicht, wie man Werte aus XML mit PHP (4.3.9) bekommt.

sagen so die Httppost XML ist das wie folgt aussieht:

<data> 
<item sku="434322" price="15.00" color="blue" shape="round"/> 
<item sku="434323" price="20.00" color="red" shape="square"/> 
<item sku="434324" price="45.00" color="green" shape="triangle"/> 
<item sku="434325" price="30.00" color="blue" shape="star"/> 
</data> 

Wie kann ich PHP-Schleife durch jeden Knoten verwenden und jeden Attributwert bekommen?

Danke !!

EDIT: Es scheint so, als ob die Daten aus dem XML-Code sehr kompliziert sind. Wenn es also einen einfacheren Weg gibt, CSV anstelle von XML zu verwenden, teilen Sie das bitte mit. Der Anbieter hat gesagt, dass sie CSV oder ein beliebiges anderes Format senden können.

+0

scrupt -> Skript? –

+0

@Jweede danke das habe ich behoben. –

Antwort

0

CSV-Daten zu handhaben, ich benutze str_getcsv()

while (($data = str_getcsv() !== FALSE) 
{do something useful with $data} 

Für XML, empfehle ich die SimpleXML class als an den XML-Parser gegenüber. Simple ist nicht die flexibelste, aber es funktioniert gut, wenn Sie nur einige Daten einlesen und speichern.

Wenn die Formulardaten ist nur eine Textzeichenfolge, dann würden Sie

$ xml = simplexml_load_string ($ string)

Und dann

foreach ($ xml -> children() as $ child)

{mache etwas interessantes}

Oder Sie können einfach die XML-Graben und es in ein Array-Dump mit xml_parse_into_struct

$ XMLParser = xml_parser_create();

xml_parse_into_struct ($ xmlparser, $ xmldata, $ werte);

xml_parser_free ($ xmlparser);

+0

SimpleXML benötigt PHP5, er benötigt eine PHP4-Lösung –

0

Sie können file_get_contents() verwenden, um die XML-Zeichenfolge von der POST-Anforderung abzurufen. Aber ich bin nicht ganz sicher, dass "php://input" bereits in PHP4 funktioniert.

$xmlData = file_get_contents("php://input"); 

In PHP4 gibt es die Erweiterung domxml für die Arbeit mit XML. Aber ich würde stark empfehlen, PHP5 und die DOM extension zu verwenden.

+0

Ich glaube: file_get_contents ("php: // input"); funktioniert in 4. Aber ich kann PHP5 jetzt nicht benutzen. –

0

Wenn Ihr Anbieter in irgendeiner Weise senden, warum schicken Sie es nicht so:
Valid PHP-Code, senden Sie es einfach als ein Array. Wenn das Vendors-Skript als PHP selbst ausgeführt wird, wäre dies noch einfacher, da sie gültigen PHP-Code ausgeben können: var_export().

Sie könnten auch versuchen, die XMLparsing-Funktionen in den Kommentaren auf dieser Seite gefunden: http://nl2.php.net/manual/en/function.xml-parse.php sie sehen alle ziemlich gut aus.

0

CSV wäre wahrscheinlich einfacher. Sie können explode() verwenden, um die Zeichenfolge zu trennen (doc unter http://us2.php.net/explode).

Zum Beispiel können Sie die Eingabe in Zeilen aufgeteilt, dann jede Zeile in Stücke aufgeteilt auf die Kommata:

// split up lines 
$lines = explode("\n", $_POST['data']); 
$data = array(); 
foreach ($lines as $row) { 
    // split a line on the commas 
    $prop = explode(',', $row); 

    // append an element to the array that contains 
    // the properties as an associative array 
    $data[] = array('sku' => $prop[0], 
        'price' => $prop[1], 
        'color' => $prop[2], 
        'shape' => $prop[3]); 

} 

Hier, ich nehme an, Sie die Eingabe in ein Array von Elementen konvertieren möchten, jedes Element der Form:

array(4) { 
    ["sku"] => 
    "434322", 
    ["price"] => 
    "15.00", 
    ["color"] => 
    "blue" 
    ["shape"] => 
    "round" 
} 
1

Dies ist, wie Sie Schleife Trog XML-Knoten mit PHP 4.0

<?php 
$dom=domxml_open_file('file.xml'); 
// Or from a string 
$dom=domxml_open_mem($xmlString); 

$root=$dom->document_element; 

$items=$root->get_elements_by_tagname('item'); 

// Loop trough childNodes 
foreach ($items as $item) { 
    $sku=$item->get_attribute('sku'); 

      // Your work here 
} 

echo $dom->dump_mem(); 
// Or to a file 
$dom->dump_file('filename.xml'); 
?> 
Verwandte Themen