在PHP中将XML转换为CSV

3
有没有一种使用PHP将XML文件转换为CSV的方法?

2
您能否也发布您的XML示例? - YOU
3
XML可以包含分层数据,而CSV只能包含表格数据。因此,这真的取决于您的XML文件。 - Mirko N.
2个回答

13

使用搜索引擎查找代码示例,例如http://codestips.com/php-xml-to-csv/

在PHP 5.0中,从XML创建CSV文件非常简单,我们只需要编写几行代码。

我们将使用来自PHP 5.0的SimpleXML扩展。

SimpleXML将整个XML读入一个对象中,我们可以通过其属性进行迭代。

要写入CSV输出文件,我们将使用fputcsv。

fputcsv将一行格式化为CSV并将其写入文件中。

假设我们有这个名为cars.xml的XML:

<?xml version='1.0'?>
<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>

首先,我们应该使用simplexml_load_file读取我们的xml文件,传递文件名并返回一个带有csv所有属性和值的对象:

$xml = simplexml_load_file($filexml);

阅读后,我们应该遍历cars的所有子节点并使用fputcsv将其写入输出文件,指定对象、分隔符和封闭符。我们应该首先将对象转换为数组以便将其写入csv:

foreach ($xml->car as $car) 
fputcsv($f, get_object_vars($car),',','"');

以下是将XML转换为CSV的完整PHP 5.0源代码:

<?php
$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);
}
?>

1
我本来想点赞的……直到我看到你使用了short_open_tag :] (短标签是邪恶的!) - Atli

-2
这是一个非常好的代码示例。符合我的要求并且能够正常工作。
<?php
$headers = array();
foreach ($xml->ROW->children() as $field) {
    $headers[] = $field->getName();
}
$filename = '';
$csv_filename = str_replace('xml', 'csv', $filename);
$file = $this->getCsvDirectory() . '/' . $csv_filename;

$csv = fopen($file, 'w');
fputcsv($csv, $headers, ',', '"');
foreach ($xml as $entry) {
    $data = get_object_vars($entry);
    $sanitized_data = array();
    foreach ($data as $key => $datum) {
        $sanitized_data[$key] = html_entity_decode($datum, ENT_COMPAT, 'UTF-8');
    }
    fputcsv($csv, $sanitized_data, ',', '"');
}
fclose($csv);
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接