您好我有从远程站点返回的以下xml结果
<ResultSet totalResultsAvailable="1">
<Product orderNo="5321" partNo="A2345" truckable="1">
<Manufacturer id="22">WIDGET 4 U</Manufacturer>
<Model id="356">ACME 500</Model>
<Years>95-98</Years>
<ProductType id="23" categoryID="4">Cool Red Widgest</ProductType>
<Material id="6">shiny stuff</Material>
<PartNo>A2345</PartNo>
<Code/>
</Product>
</ResultSet>
我只是试图将xml结果拉出来并放入一个新的csv文件中,其中包含以下代码:
但我得到并且错误:警告:
Invalid argument supplied for foreach() in /home/myServer/public_html/xmlParser2.php on line 14
这是我的代码:
<?
echo 'Write XML to CSV';
$basenameLong ='http://thisIsTheURLto.com/myFeed/?key=123456789&mode=getProducts;
$fileNameCSV = 'xmlParseContent.csv';
$feedContent = '';
echo '<br/>Starting......';
$feedContent = file_get_contents($basenameLong);
$fh = fopen($fileNameCSV, 'w+'); //create new CSV file if not exists else append
foreach($feedContent->ResultSet->Product as $product) {
fputcsv($f, get_object_vars($product),',','"');
}
fclose($fh);
?>
我知道这段代码很简单,但是你能帮我找到问题吗?我是新手,我没有看到它。
答案 0 :(得分:1)
这一行错了:
fputcsv($f, get_object_vars($product),',','"');
如果您想要输入空白值,请尝试执行以下操作:
fputcsv($f, get_object_vars($product),'','','');
答案 1 :(得分:0)
您的问题是您从不解析XML文件。将file_get_contents
替换为simplexml_load_file
,它应该有效。
答案 2 :(得分:0)
使用PHP将XML转换为CSV非常简单,至少在我到目前为止遇到的情况下。就我而言,如果我可以简单地将结构化XML数据转换为CSV数据,那将为我节省大量工作。通常,我只想转换原始XML文档的特定xpath中的数据。下面的PHP函数将加载XML文件并将指定xpath中的元素转换为简单的csv数据。
function xml2csv ($xmlFile, $xPath) {
// Load the XML file
$xml = simplexml_load_file($xmlFile);
// Jump to the specified xpath
$path = $xml->xpath($xPath);
// Loop through the specified xpath
foreach($path as $item) {
// Loop through the elements in this xpath
foreach($item as $key => $value) {
$csvData .= '"' . trim($value) . '"' . ',';
}
// Trim off the extra comma
$csvData = trim($csvData, ',');
// Add an LF
$csvData .= "\n";
}
// Return the CSV data
return $csvData;
}