0

curlを使用してアクセスする必要があるxmlデータフィードがあります。curl出力を取得し、XMLReaderを使用して各ノードを読み取ろうとしましたが、機能しませんでした。カールを使用してフィードをロードした場合、かなり大きいため、約1〜2分かかります。

だから私が思ったのは、フィードをサーバーにダウンロードしてcsvに変換し、データベースにアップロードすることでした。だから私は私のデータベースを最新の状態に保つためにcronでそれを使うことができます。

通常のxmlフィードでは正常に機能しているように見えるこのコードを見つけましたが、私のフィードでは機能していないようです。

このフィードで

<cars>
<car>
 <color>blue</color>
 <price>2000</price>
</car>
<car>
 <color>red</color>
 <price>10000</price>
</car> 
<car>
 <color>black</color>
 <price>5000</price>
</car>
</cars>

以下のコードを使用すると機能します。

$filexml='cars.xml';
if (file_exists($filexml)) {
    $xml = simplexml_load_file($filexml);
$f = fopen('cars.csv', 'w');
foreach ($xml->car as $car) {
    fputcsv($f, get_object_vars($car),',','"');
}
fclose($f);
}

しかし、以下のフィードに関しては、上記のコードを変更して、モデル、画像、画像、タイプなどをcsvに追加するにはどうすればよいですか?

 <cars>
<car>
 <color>blue</color>
 <price>2000</price>
 <model />
  <pictures>
    <image>1.jpg</image>
    <image>2.jpg</image>
  </pictures>
  <type>
   <bodykit>yes</bodykit>
   <turbo>no</turbo>
   <sound>surround</sound>
 </type>
</car>
<car>
 <color>red</color>
 <price>10000</price>
<model>GTX</model>
  <pictures>
    <image>5.jpg</image>
  </pictures>
  <type>
   <bodykit>yes</bodykit>
   <turbo>no</turbo>
   <sound>no</sound>
 </type>
 </car> 
 <car>
 <color>black</color>
 <price>5000</price>
 <model>GTX</model>
  <pictures>
    <image>5.jpg</image>
    <image>8.jpg</image>
  </pictures>
  <type>
   <bodykit>yes</bodykit>
   <turbo>no</turbo>
   <sound>surround</sound>
 </type>
</car>
</cars>

どんな助けや考えもありがたいです...

4

1 に答える 1

0

これがあなたが試すかもしれない何かです

$filexml='cars.xml';

    if (file_exists($filexml)) 
           {
       $xml = simplexml_load_file($filexml);
       $f = fopen('cars.csv', 'w');
       createCsv($xml, $f);
       fclose($f);
    }

    function createCsv($xml,$f)
    {

        foreach ($xml->children() as $car) 
        {

           $hasChild = (count($car->children()) > 0)?true:false;

        if( ! $hasChild)
        {
           $put_arr = array($car->getName(),$car); 
           fputcsv($f, $put_arr ,',','"');

        }
        else
        {
         createCsv($car, $f);
        }
     }

    }
于 2013-03-21T18:38:16.337 に答える