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_contentsと交換simplexml_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 に答える