2010-01-25 3 views
4

J'ai du code PHP pour transformer un fichier XML en un fichier CSV. Pendant les tests, je ne crée pas de fichier CSV, je fais juste écho aux résultats dans un format CSV.Trier tous les attributs dans l'arborescence XML avec PHP XMLReader

Chaque fois que XMLReader atteint un élément vide, il affiche tous les attributs de l'élément.

1) Existe-t-il un moyen de générer le nom de l'attribut avec ses valeurs, c'est-à-dire (existe-t-il un $ xml-> AttributeName associé à la valeur $ xml->)?

2) Existe-t-il un moyen de trier tous les attributs de l'arbre entier et pas seulement ceux de l'élément vide?

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

Erreur de syntaxe: echo $ xml-> valeur, ','; devrait être echo $ xml-> value. ','; ?? –

+0

en fait les deux sont acceptables. Je devrais utiliser ce dernier si je créais une variable, mais l'écho prend en charge les virgules. – Brian

+0

Ceci n'est pas une erreur de syntaxe, echo accepte n'importe quel nombre d'arguments séparés par des virgules. –

Répondre

3

$ xml-> nom renvoie le nom qualifié du nœud. Comme les attributs sont des nœuds avec le type XMLReader :: ATTRIBUTE, $ xml-> name renvoie le nom de l'attribut courant dans ce cas. Voici la version du code, qui affiche à la fois les noms et les valeurs des attributs.

<?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++; 
    } 
} 
?>