有没有办法使用PHP将XML文件转换为CSV?
答案 0 :(得分: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);
在阅读之后,我们应该遍历汽车的所有子节点,并使用指定对象,分隔符和机箱的fputcsv将其写入输出文件。我们首先应该将对象转换为数组,以便将其写入csv:
foreach ($xml->car as $car)
fputcsv($f, get_object_vars($car),',','"');
以下是在php 5.0中将xml转换为csv的完整源代码:
<?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 :(得分:-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);
?>