0

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


?>

我知道这段代码非常基本,但你能帮我找到问题吗?我是新手,我没有看到它。

4

3 回答 3

1

这一行是错误的:

fputcsv($f, get_object_vars($product),',','"');

如果您想输入空白值,请尝试这样做:

fputcsv($f, get_object_vars($product),'','','');
于 2012-12-16T21:37:06.753 回答
0

您的问题是您从不解析 XML 文件。替换file_get_contentssimplexml_load_file它应该可以工作。

于 2013-03-18T12:19:29.573 回答
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;

}
于 2013-03-18T12:35:56.537 回答