Czy istnieje sposób na przekonwertowanie pliku XML na CSV przy użyciu PHP?
Odpowiedzi:
13 dla odpowiedzi nr 1Uż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);
?>