0

我有一个需要使用 curl 访问的 xml 数据源。我试图获取 curl 输出并使用 XMLReader 读取每个节点,但它没有工作。因为当我使用 curl 加载提要时,它需要大约 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 回答