Как получить значение атрибута из XML файла в PHP?
Извините, если это кажется легким вопросом, но я начал вытягивать волосы на этом...
У меня есть XML файл, который выглядит так...
<VAR VarNum="90">
<option>1</option>
</VAR>
Я пытаюсь получить VarNum.
До сих пор мне удалось использовать следующий код, чтобы получить другую информацию:
$xml=simplexml_load_file($file);
$option=$xml->option;
Я просто не могу получить VarNum (значение атрибута, которое я думаю?)
Спасибо!
Ответы
Ответ 1
Вы должны получить это, используя SimpleXMLElement:: attributes()
Попробуйте следующее:
$xml=simplexml_load_file($file);
foreach($xml->Var[0]->attributes() as $a => $b) {
echo $a,'="',$b,"\"\n";
}
Это покажет вам все атрибуты name/value для первого элемента foo
. Это ассоциативный массив, поэтому вы также можете это сделать:
$attr = $xml->Var[0]->attributes();
echo $attr['VarNum'];
Ответ 2
Как насчет использования $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 Основное использование в руководстве: -)
Ответ 3
[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/
)
)
)
Я применил приведенный ниже код
$xml = simplexml_load_string($response);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
print_r($array);
но он не используется полностью. Я хочу, чтобы все данные в одном массиве в php