204 votes

Comment convertir xml en tableau en php?

Je veux convertir XML ci-dessous au tableau PHP. Toutes les suggestions sur comment je peux faire cela?

<aaaa Version="1.0">
   <bbb>
     <cccc>
       <dddd Id="id:pass" />
       <eeee name="hearaman" age="24" />
     </cccc>
   </bbb>
</aaaa>

501voto

user1398287 Points 595

facile!

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

141voto

Sam Dufel Points 10154

Une autre option est l'extension SimpleXML (je crois que c'est livré en standard avec la plupart de php installe.)

http://php.net/manual/en/book.simplexml.php

La syntaxe ressemble à quelque chose comme ça pour ton exemple

$xml = new SimpleXMLElement($xmlString);
echo $xml->bbb->cccc->dddd['Id'];
echo $xml->bbb->cccc->eeee['name'];
// or...........
foreach ($xml->bbb->cccc as $element) {
  foreach($element as $key => $val) {
   echo "{$key}: {$val}";
  }
}

51voto

hakre Points 102271

La conversion d'une chaîne de caractères XML ($buffer) dans un tableau simplifié d'ignorer les attributs de groupement et de l'enfant-éléments avec le même nom:

function XML2Array(SimpleXMLElement $parent)
{
    $array = array();

    foreach ($parent as $name => $element) {
        ($node = & $array[$name])
            && (1 === count($node) ? $node = array($node) : 1)
            && $node = & $node[];

        $node = $element->count() ? XML2Array($element) : trim($element);
    }

    return $array;
}

$xml   = simplexml_load_string($buffer);
$array = XML2Array($xml);
$array = array($xml->getName() => $array);

Résultat:

Array
(
    [aaaa] => Array
        (
            [bbb] => Array
                (
                    [cccc] => Array
                        (
                            [dddd] => 
                            [eeee] => 
                        )

                )

        )

)

Si vous aussi vous voulez avoir les attributs, elles sont disponibles via JSON de codage/décodage de SimpleXMLElement. C'est souvent le plus facile rapide n'dirty solution:

$xml   = simplexml_load_string($buffer);
$array = json_decode(json_encode((array) $xml), 1);
$array = array($xml->getName() => $array);

Résultat:

Array
(
    [aaaa] => Array
        (
            [@attributes] => Array
                (
                    [Version] => 1.0
                )

            [bbb] => Array
                (
                    [cccc] => Array
                        (
                            [dddd] => Array
                                (
                                    [@attributes] => Array
                                        (
                                            [Id] => id:pass
                                        )

                                )

                            [eeee] => Array
                                (
                                    [@attributes] => Array
                                        (
                                            [name] => hearaman
                                            [age] => 24
                                        )

                                )

                        )

                )

        )

)

Prendre note que toutes ces méthodes ne fonctionnent que dans l'espace de noms du document XML.

40voto

Fawad Ghafoor Points 1617
$array = json_decode(json_encode((array)simplexml_load_string($xml)),1);

1voto

Shashank Patel Points 217

Veuillez consulter cette

utiliser la réponse donnée par moi ci-dessous quesion il fonctionnera de nice.

dans ce remplacer $ssString valeur par

"<aaaa Version="1.0"><bbb><ccc><dddd Id="id:pass" /><eeee name="hearaman" age="24" /></cccc></bbb></aaa>"

si tous les inconvénients de me le dire.

Comment faire pour convertir cette demande XML dans un tableau en php?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X