XML到CSV =无效参数

时间:2012-12-16 21:28:53

标签: php xml parsing

您好我有从远程站点返回的以下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);


?>

我知道这段代码很简单,但是你能帮我找到问题吗?我是新手,我没有看到它。

3 个答案:

答案 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;

}