2010-01-25 2 views
4

У меня есть код PHP, чтобы превратить XML-файл в файл CSV. Во время тестирования я не создаю CSV-файл, просто повторяя результаты в формате CSV.Сортировка всех атрибутов в дереве XML с помощью PHP XMLReader

Всякий раз, когда XMLReader достигает пустого элемента, он выводит все атрибуты элемента.

1) Есть способ вывода имени атрибута с его значениями i.e. (есть ли $ xml-> AttributeName, которое идет со значением $ xml->)?

2) Есть ли способ сортировки для всех атрибутов всего дерева, а не только для пустого элемента?

<?php 

ini_set('memory_limit','50M'); 

$x = file_get_contents('H8_data.xml'); 

$xml = new XMLReader(); 
$xml->open('H8_data.xml', null, 1<<19); 

$num = 1; 
while ($xml->read() && $num <= 2000) { 
    if($xml->isEmptyElement) { 
     if($xml->hasAttributes) { 
      while($xml->moveToNextAttribute()) { 
       echo $xml->value, ', '; 
      } 
     } 
    echo '<br />'; 
    $num++; 
    } 
} 

?>

+0

Ошибка синтаксиса: echo $ xml-> value, ','; должен быть значением echo $ xml->. ','; ?? –

+0

фактически оба приемлемы. Мне пришлось бы использовать последнее, если бы я создавал переменную, но echo поддерживает запятые. – Brian

+0

Это не синтаксическая ошибка, echo принимает любое количество аргументов, разделенных запятыми. –

ответ

3

$ xml-> имя возвращает полное имя узла. Поскольку атрибуты - это узлы с типом XMLReader :: ATTRIBUTE, в этом случае имя $ xml-> будет возвращать имя текущего атрибута. Ниже приведена версия кода, которая выводит имена и значения атрибутов.

<?php 

ini_set('memory_limit','50M'); 

$x = file_get_contents('H8_data.xml'); 

$xml = new XMLReader(); 
$xml->open('H8_data.xml', null, 1<<19); 

$num = 1; 
while ($xml->read() && $num <= 2000) { 
    if($xml->isEmptyElement) { 
     if($xml->hasAttributes) { 
      while($xml->moveToNextAttribute()) { 
       echo $xml->name, ' = ', $xml->value, ', '; 
      } 
     } 
    echo '<br />'; 
    $num++; 
    } 
} 
?> 
Смежные вопросы