2010-08-13 9 views
3

J'ai un XML simple que je voudrais analyser dans un tableau en PHP afin de pouvoir construire des insertions SQL dynamiques.Convertir des éléments XML en un tableau

XML Exemple:

<Data> 
    <Key>1</Key> 
    <Column>Value 1</Column> 
    <Column2>Value 2</Column> 
</Data> 

Les données seront transmises à PHP via http POST.

Quelle est la manière la plus facile de faire cela? Il devrait toujours y avoir une instance de mais souhaiterait pouvoir prendre plusieurs instances à partir d'un POST.

Je peux certainement construire du code pour analyser PHP spécifique, mais je voudrais utiliser un seul morceau de code pour gérer les données dynamiquement afin qu'il puisse être utilisé pour créer des insertions pour plusieurs tables.

Répondre

4

Eh bien, en supposant que vous voulez un résultat de

array(
    1 => array(
     'Value 1', 
     'Value 2', 
    ) 
) 

Et en supposant une structure de

<root> 
    <Data> 
     <!-- key and column entities --> 
    </Data> 
    <Data> 
     <!-- key and column entities --> 
    </Data> 
    <Data> 
     <!-- key and column entities --> 
    </Data> 
</root> 

Vous pourriez faire quelque chose comme (je préfère DomDocument):

$dom = new DomDocument(); 
$dom->loadXml($xmlString); 
$dataElements = $dom->getElementsByTagName('Data'); 
$array = array(); 
foreach ($dataElements as $element) { 
    $subarray = array(); 
    foreach ($element->childNodes as $node) { 
     if (!$node instanceof DomElement) { 
      continue; 
     } 
     $key = $node->tagName; 
     $value = $node->textContent; 
     $subarray[$key] = $value; 
    } 
    $array[] = $subarray; 
} 

Avec cette édition, il va tourner:

<root> 
    <Data> 
     <Key>4</Key> 
     <Foo>Bar</Foo> 
    </Data> 
    <Data> 
     <Key>6</Key> 
     <Bar>Baz</Bar> 
    </Data> 
</root> 

en:

array(
    array(
     'Key' => 4, 
     'Foo' => 'Bar', 
    ), 
    array(
     'Key' => 6, 
     'Bar' => 'Baz', 
    ), 
) 
+0

Mon but est de ne pas avoir à Key coder en dur, colonne et Colonne2 - le format pourrait être ... ... mais ce qui est à l'intérieur des données sera variable. Je suppose que je suis juste à la recherche d'une fonction qui va retourner tous les noms d'éléments à l'intérieur de afin que je puisse ensuite extraire la valeur de cet élément. J'ai essayé simplxml avec $ xmlstr = " AAA"; $ sxe = new SimpleXMLElement ($ xmlstr); echo $ sxe-> getName(). "\ n"; foreach ($ sxe-> children() as $ enfant) { echo $ child-> getName(). "\ n"; } mais il retourne: Data Key Colonne – andyknas

+0

N'est-ce pas ce que vous voulez qu'il retourne? Je suis confus quant à ce que vous essayez d'accomplir ... Si vous voulez juste par le nom de l'étiquette, je vais modifier ma réponse avec ça ... – ircmaxell

+0

Votre réponse semble bonne. Je vais essayer, merci beaucoup! – andyknas

Questions connexes