我有一个需要使用curl访问的xml数据源。我试图获取curl输出并使用XMLReader读取每个节点,但它没有工作。因为当我使用curl加载Feed时,它需要大约1-2分钟,因为它非常大。
所以我认为将源下载到我的服务器并将其转换为csv并将其上传到我的数据库。所以我可以用它与cron一起保持我的数据库更新。
我发现这段代码似乎在普通的xml Feed中运行良好,但它似乎不适用于我的Feed。
在此Feed中
<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);
}
但是当涉及到以下Feed时,如何更改上面的代码以将模型,图片,图像,类型....添加到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>
任何帮助或想法将不胜感激......
答案 0 :(得分: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);
}
}
}