Http posta yoluyla benim komut dosyası gönderilen xml veri almak nasıl?

5 Cevap php

Bir satıcı Ben yapmak için gidiyorum bir komut dosyası için bir HttpPost yoluyla bana bazı xml gönderme olacak. Script, ne zaman ben bir şekilde xml den veri almak ve benim veri tabanı içine koymak gerekir HttpPost alır.

Ben her 3 deneyimi, PHP MYSQL ve XML var. Ben E4X'i kullanarak XML değerleri almak için nasıl biliyorum ama ben PHP (4.3.9) kullanarak XML değerleri almak için nasıl bilmiyorum.

böylece HttpPost bu gibi görünüyor XML olduğunu söylüyorlar:

<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>

Nasıl her düğüm döngü PHP kullanmak ve her öznitelik değeri alabilirim?

Teşekkürler!

EDIT: It seems like getting the data from the XML is way complicated so if there is an easier way using something like CSV instead of XML please share that. The vendor did say they could send CSV or whatever format I want.

5 Cevap

Bu nasıl döngü yalak XML nodes ile PHP 4.0 olduğunu

<?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');
?>

Sen file_get_contents() POST isteği XML dizesi getirmek için kullanabilirsiniz. Ama ben "php://input" zaten PHP4'te çalıştığını oldukça emin değilim.

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

PHP4 XML ile çalışmak için uzatma domxml var. Ama şiddetle PHP5 ve DOM extension kullanarak öneriyoruz.

CSV verilerini işlemek için, ben kullanmak str_getcsv()

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

XML Parser aksine XML, ben SimpleXML class öneririz. Basit en esnek değil, ama yaptığın her bazı verileri okuma ve kaydetme ise gayet güzel çalışıyor.

Form verileri sadece bir metin dizesi ise, o zaman ederim

$ Xml = simplexml_load_string ($ string)

Sonra

foreach ($ çocuk olarak $ xml-> çocuk ())

{Ilginç bir şey yapmak}

Yoksa sadece XML hendek ve xml_parse_into_struct ile bir dizi içine dökümü

$ Xmlparser = xml_parser_create ();

xml_parse_into_struct ($ xmlparser, $ xmldata, $ değerleri);

xml_parser_free ($ xmlparser);

If your vendor can send it in any way, why not send it as:
Valid PHP code, just send it as an array. If the Vendors script are running as PHP themself then this would be even easier as they can output valid PHP code using: var_export().

Ayrıca bu sayfada yorumlarına bulunan XMLparsing fonksiyonlarını kullanarak deneyebilirsiniz: http://nl2.php.net/manual/en/function.xml-parse.php hepsi oldukça iyi görünüyor.

CSV muhtemelen basit olurdu. Sen (http://us2.php.net/explode de doc) dize bölmek için () patlayabilir kullanabilirsiniz.

Örneğin, çizgiler içine girdi ayırabilirsiniz sonra virgül üzerinde parçalar halinde her satırı bölmek:

// 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]);

}

İşte, size elemanları, formun her elemanın bir diziye girişini dönüştürmek istediğiniz varsayarak yaşıyorum:

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