Как получить значение атрибута из XML-файла в PHP? - PullRequest
18 голосов
/ 10 августа 2009

Извините, если это кажется легким вопросом, но я начал вытягивать волосы ...

У меня есть XML-файл, который выглядит следующим образом ...

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

Я пытаюсь получить VarNum .

До сих пор я успешно использовал следующий код для получения другой информации:

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

Я просто не могу получить VarNum (значение атрибута, я думаю?)

Спасибо!

Ответы [ 3 ]

23 голосов
/ 10 августа 2009

Вы можете получить это, используя SimpleXMLElement :: attribute ()

Попробуйте это:

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

Это покажет вам все атрибуты имени / значения для первого foo элемента. Это ассоциативный массив, так что вы также можете сделать это:

$attr = $xml->Var[0]->attributes();
echo $attr['VarNum'];
14 голосов
/ 10 августа 2009

Как насчет использования $xml['VarNum']?

Как это:

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

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

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

(я использовал simplexml_load_string, потому что я вставил ваш XML в строку вместо того, чтобы создавать файл; то, что вы делаете с simplexml_load_file, в вашем случае хорошо!)

достанет вам

string '90' (length=2)

С simpleXML вы получаете доступ к атрибутам с помощью синтаксиса массива.
И вам нужно привести к строке, чтобы получить значение, а не и экземпляр SimpleXMLElement

Например, см. пример # 5 из Основное использование в руководстве: -)

1 голос
/ 28 декабря 2012
[0] => Array
                (
                    [@attributes] => Array
                        (
                            [uri] => https://abcd.com:1234/abc/cst/2/
                        [id] => 2
                    )

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

                [company] => abc SOLUTION
                [email] => abc@xyz.com
                [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/
                            )

                    )

            )

Я применил следующий код

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

но он не используется полностью, я хочу, чтобы все данные в одном массиве в php

...