2010-01-24 92 views
3

有沒有辦法使用PHP將XML文件轉換爲CSV?在PHP中將XML轉換爲CSV

+2

你還可以發佈你的xml示例嗎? – YOU 2010-01-24 09:00:02

+3

XML可以包含分層數據,而CSV僅包含表格數據。所以它真的取決於你的XML。 – 2010-01-24 09:14:39

回答

13

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

要在PHP 5.0中的XML這是非常簡單的創建一個CSV文件,我們只需要編寫一些行。

我們將使用來自PHP 5.0的SimpleXML擴展。

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> 

首先,我們應該使用使用simplexml_load_file傳遞文件的名稱閱讀我們的XML並返回該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); 
} 
?> 
+1

我打算投票...直到我看到你使用'short_open_tag':] *(短標籤是ebil!)* – Atli 2010-01-24 09:30:35

+0

謝謝,我編輯過。 – Pentium10 2010-01-24 10:45:10

-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; 
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); 
?>