2010-01-24 9 views
3

PHP를 사용하여 XML 파일을 CSV로 변환 할 수있는 방법이 있습니까?PHP에서 XML로 CSV 변환

+2

xml 샘플을 게시 할 수도 있습니까? – YOU

+3

XML에는 계층 적 데이터가 포함될 수 있으며 CSV에는 표 형식의 데이터 만 포함될 수 있습니다. 따라서 XML에 따라 달라집니다. –

답변

13

를 사용하여 검색 엔진이 매우 간단 PHP 5.0에서 XML에서 CSV 파일을 만들려면 같은 http://codestips.com/php-xml-to-csv/

로 코드 샘플을 찾기 위해, 우리는 단지 몇 줄을 작성해야합니다.

PHP 5.0에서 제공되는 SimpleXML 확장을 사용합니다.

SimpleXML은 전체 xml을 객체로 읽어 들여 해당 속성을 반복 할 수 있습니다. csv 출력 파일에 쓰려면 fputcsv를 사용합니다.

fputcsv는 줄을 csv로 포맷하고 파일에 씁니다.

<?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이 cars.xml 이름을 가지고있다 :

$xml = simplexml_load_file($filexml); 

을 읽은 후 우리는 자동차의 모든 자식 노드를 반복해야하며, 개체, 구분 및 인클로저를 지정 fputcsv 사용하여 출력 파일에 씁니다. 여기

<?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'을 사용하는 것을 보았을 때까지 투표를했다. * (짧은 태그는 에빌이다!) * – Atli

+0

고맙다. 나는 편집했다. – Pentium10

-2

가 있습니다 : 여기

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

는 PHP 5.0 CSV로 XML을 변환하는 완전한 소스 코드입니다 : 우리는 먼저 CSV에 기록하기 위해 배열로 객체를 변환해야합니다 아주 좋은 코드 예제. 내 rquirement와 잘 작동합니다.

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