如何通过http post从xml中获取发送到我脚本的数据?

时间:2009-03-12 19:38:36

标签: php xml

供应商将通过httppost向我发送一些xml到我要制作的脚本。该脚本在收到httppost时我需要以某种方式从xml获取数据并将其放入我的数据库中。

我确实熟悉所有3,PHP MYSQL和XML。我知道如何使用E4X从XML获取值,但我不知道如何使用PHP(4.3.9)从XML获取值。

所以说httppost就是这样的XML:

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

如何使用PHP循环遍历每个节点并获取每个属性值?

谢谢!

修改: 看起来从XML获取数据看起来很复杂,所以如果有一种更简单的方式使用CSV而不是XML,请分享。供应商确实说他们可以发送CSV或我想要的任何格式。

5 个答案:

答案 0 :(得分:1)

这是使用 PHP 4.0

循环 XML节点的方法
<?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');
?>

答案 1 :(得分:0)

要处理CSV数据,请使用str_getcsv()

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

对于XML,我推荐SimpleXML class而不是XML Parser。简单并不是最灵活的,但如果您所做的只是读取一些数据并保存它,它就可以正常工作。

如果表单数据只是一个文本字符串,那么你就

  

$ xml = simplexml_load_string($ string)

然后

  

foreach($ xml-&gt; children()为$ child)

     

{做一些有趣的事情}

或者您可以放弃XML并将其转储到包含xml_parse_into_struct

的数组中
  

$ xmlparser = xml_parser_create();

     

xml_parse_into_struct($ XMLParser的,$ XMLDATA,$值);

     

xml_parser_free($ XMLParser的);

答案 2 :(得分:0)

您可以使用file_get_contents()从POST请求中获取XML字符串。但我不太确定“php://input”已经在PHP4中有效。

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

在PHP4中,有一个用于处理XML的扩展domxml。但我强烈建议使用PHP5和DOM extension

答案 3 :(得分:0)

如果您的供应商可以以任何方式发送,为什么不将其发送为:
有效的PHP代码,只需将其作为数组发送。如果Vendors脚本以PHP身份运行,那么这将更容易,因为它们可以使用:var_export()输出有效的PHP代码。

您也可以尝试使用此页面评论中的XMLparsing函数:http://nl2.php.net/manual/en/function.xml-parse.php它们看起来都很合适。

答案 4 :(得分:0)

CSV可能会更简单。您可以使用explode()拆分字符串(doc http://us2.php.net/explode)。

例如,您可以将输入拆分为行,然后将每一行拆分为逗号:

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

}

在这里,我假设您要将输入转换为元素数组,表单的每个元素:

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