供应商将通过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或我想要的任何格式。
答案 0 :(得分:1)
这是使用 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');
?>
答案 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"
}