web-dev-qa-db-fra.com

Comment obtenir la valeur d'un attribut à partir d'un fichier XML en PHP?

Désolé si cela semble être une question facile, mais j'ai commencé à arracher les cheveux à ce sujet ...

J'ai un fichier XML qui ressemble à ceci ...

<VAR VarNum="90">
  <option>1</option>
</VAR>

J'essaye d'obtenir le VarNum.

Jusqu'à présent, j'ai réussi à utiliser le code suivant pour obtenir les autres informations:

$xml=simplexml_load_file($file);
$option=$xml->option;

Je ne peux tout simplement pas obtenir VarNum (la valeur d'attribut je pense?)

Merci!

19
Matt

Vous devriez pouvoir obtenir ceci en utilisant SimpleXMLElement :: attributes ()

Essaye ça:

$xml=simplexml_load_file($file);
foreach($xml->Var[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

Cela vous montrera tous les attributs de nom/valeur pour le premier élément foo. C'est un tableau associatif, vous pouvez donc le faire également:

$attr = $xml->Var[0]->attributes();
echo $attr['VarNum'];
24
zombat

Qu'en est-il de l'utilisation de $xml['VarNum']?

Comme ça :

$str = <<<XML
<VAR VarNum="90">
  <option>1</option>
</VAR>
XML;

$xml=simplexml_load_string($str);
$option=$xml->option;

var_dump((string)$xml['VarNum']);

(J'ai utilisé simplexml_load_string parce que j'ai collé votre XML dans une chaîne, au lieu de créer un fichier; ce que vous faites avec simplexml_load_file va bien, dans votre cas!)

Vous obtiendrez

string '90' (length=2)

Avec simpleXML, vous accédez aux attributs avec une syntaxe de tableau.
Et vous devez transtyper en une chaîne pour obtenir la valeur, et non et l'instance de SimpleXMLElement

Par exemple, voir l'exemple # 5 de tilisation de base dans le manuel :-)

14
Pascal MARTIN
[0] => Array
                (
                    [@attributes] => Array
                        (
                            [uri] => https://abcd.com:1234/abc/cst/2/
                        [id] => 2
                    )

                [name] => Array
                    (
                        [first] => abcd
                        [last] => efg
                    )

                [company] => abc SOLUTION
                [email] => [email protected]
                [homepage] => WWW.abcxyz.COM
                [phone_numbers] => Array
                    (
                        [phone_number] => Array
                            (
                                [0] => Array
                                    (
                                        [main] => true
                                        [type] => work
                                        [list_order] => 1
                                        [number] => +919876543210
                                    )

                                [1] => Array
                                    (
                                        [main] => false
                                        [type] => mobile
                                        [list_order] => 2
                                        [number] => +919876543210
                                    )

                            )

                    )

                [photo] => Array
                    (
                        [@attributes] => Array
                            (
                                [uri] => https://abcd.com:1234/abc/cst/2/cust_photo/
                            )

                    )

            )

J'ai appliqué le code ci-dessous

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

mais il n'est pas utilisé à fond je veux toutes les données dans un seul tableau en php

1
sunnykachwala