Конвертировать XML в CSV в PHP - PullRequest
3 голосов
/ 24 января 2010

Есть ли способ преобразовать файл XML в CSV с помощью PHP?

Ответы [ 2 ]

13 голосов
/ 24 января 2010

Используйте поисковые системы, чтобы найти примеры кода, такие как http://codestips.com/php-xml-to-csv/

Чтобы создать файл CSV из XML в PHP 5.0, это очень просто, нам просто нужно написать несколько строк.

Мы будем использовать расширение SimpleXML, пришедшее из PHP 5.0.

SimpleXML считывает весь xml в объект, который мы можем перебирать через его свойства. Для записи в выходной файл csv мы будем использовать fputcsv.

fputcsv форматирует строку как csv и записывает ее в файл.

Предположим, у нас есть этот xml с именем cars.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>

Сначала мы должны прочитать наш xml, используя simplexml_load_file, передавая имя файла и возвращая объект со всеми свойствами и значениями csv:

$xml = simplexml_load_file($filexml);

После прочтения мы должны перебрать все дочерние узлы автомобилей и записать его в выходной файл, используя 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);
}
?>
0 голосов
/ 19 апреля 2017

Вот очень хороший пример кода. отлично работает с моим требованием.

<?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);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...