2013-04-23 4 views
-1

Вот код, который я использовал для его преобразования в csv.which работает отлично.Как получить имена узлов XML при преобразовании XML в CSV?

function xml2array($file) { 
$string = file_get_contents($file); 
$parser = xml_parser_create(); 
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); 
xml_parse_into_struct($parser, $string, $vals, $index); 
xml_parser_free($parser);  
$ary=array(); 
$i=-1; 
foreach ($vals as $r){ 
    if($r['level'] == 1)continue; 
    if($r['level'] == 2 && $r['type'] == "open"){ 
     ++$i; 
     continue; 
     } 
    $ary[$i][$r['tag']] = @$r['value']; 
} 
return $ary; 
} 
$array=xml2array('inventory.xml'); 
$outstream = fopen('inventory.csv','w'); 
$header=false; 
foreach($array as $k=>$details){ 
if(!$header){ 
    fputcsv($outstream,$details); 
    $header=true; 
} 
fputcsv($outstream,$details); 
} 
fclose($outstream); 

Проблема: я получаю правильные данные в CSV-файл, но не получаю XML заголовки (имена узлов) в моем генерируемой csv.What отсутствует Помогите мне

+0

Hi, Stack Overflow на самом деле не является ремонтной станцией для копирования и вставки кода. Ожидается, что аскеры покажут * некоторые свои усилия. –

+1

@pekka well thats мое усилие sir.Что мне нужно, нужно знать, где я ошибаюсь, чтобы получить значения заголовков. Thanx – CodePlayer

ответ

1

Я думаю, что вы ищете array_keys(), хотя следует отметить, что для этого так все элементы в xml должны иметь одинаковую структуру и никаких вложенных дочерних элементов, на которые я верю. Если это так, это будет работать:

function xml2array($file) { 
$string = file_get_contents($file); 
$parser = xml_parser_create(); 
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); 
xml_parse_into_struct($parser, $string, $vals, $index); 
xml_parser_free($parser);  
$ary=array(); 
$i=-1; 
foreach ($vals as $r){ 
    if($r['level'] == 1)continue; 
    if($r['level'] == 2 && $r['type'] == "open"){ 
     ++$i; 
     continue; 
     } 
    $ary[$i][$r['tag']] = @$r['value']; 
} 
return $ary; 
} 

$array=xml2array('inventory.xml'); 
$outstream = fopen('inventory.csv','w'); 
//output the names of the first array item's keys 
fputcsv($outstream, array_keys($array[0])); 
foreach($array as $k=>$details){ 
    fputcsv($outstream,$details); 
} 
fclose($outstream); 
+0

thanx.it работал – CodePlayer

1
if(!$header){ 
    fputcsv($outstream,$details); 
    $header=true; 
} 
fputcsv($outstream,$details); 

fputcsv в if-branch делает то же самое, что и безусловный, поэтому он просто дублирует первую строку. см. http://docs.php.net/array_keys

+0

yup, его делает то же самое. Я изменяю it.thanx для ответа – CodePlayer

Смежные вопросы