/ / Konwertuj XML na CSV w PHP - php, xml, csv

Konwertuj XML na CSV w PHP - php, xml, csv

Czy istnieje sposób na przekonwertowanie pliku XML na CSV przy użyciu PHP?

Odpowiedzi:

13 dla odpowiedzi nr 1

Użyj wyszukiwarek, aby zlokalizować próbki kodu, takie jak http://codestips.com/php-xml-to-csv/

Aby utworzyć plik csv z xml w PHP 5.0, jest to bardzo proste, będziemy musieli napisać kilka wierszy.

Użyjemy rozszerzenia SimpleXML, które pochodzi z PHP 5.0.

SimpleXML odczytuje cały xml do obiektu, który możemy iterować przez jego właściwości. Aby zapisać do pliku wyjściowego csv, użyjemy fputcsv.

fputcsv formatuje linię jako csv i zapisuje ją do pliku.

Załóżmy, że mamy ten plik XML o nazwie 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>

Najpierw powinniśmy przeczytać nasz xml używając simplexml_load_file przekazując nazwę pliku i zwracając obiekt ze wszystkimi właściwościami i wartościami csv:

$xml = simplexml_load_file($filexml);

Po przeczytaniu powinniśmy przejrzeć wszystkowęzły potomne samochodów i zapisz je do pliku wyjściowego za pomocą fputcsv określającego obiekt, separator i obudowę. Powinniśmy najpierw przekonwertować obiekt na tablicę, aby napisać go do csv:

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

Oto kompletny kod źródłowy, który konwertuje xml na csv w 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);
}
?>

-2 dla odpowiedzi nr 2

Oto bardzo dobry przykład kodu. działa dobrze z moim wymaganiem.

<?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;
if (file_exists($file)) {
unlink($file);
}
$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);
?>