2016-01-11 2 views
0

Я использую этот код, чтобы получить файл XML:simplexml_load_string не похоже на работу

<?php 
$username ="XXXX"; 
$password = "XXXX"; 
$url = 'XXXX'; 

$context = stream_context_create(array(
    'http' => array(
     'header' => "Authorization: Basic " . base64_encode("$username:$password") 
    ) 
)); 

$stringXML = file_get_contents($url, false, $context); 
print_r($stringXML); 
$stringXML = simplexml_load_string($stringXML); 
echo "<br>"; 
print_r($stringXML); 

Мой XML выглядит следующим образом:

<ns:getInfoResponse xmlns:ns="xxxx"> <ns:return> <result> <entry I_Personne="2291568592"> <loginGraceRemaining>10</loginGraceRemaining> <loginTime>20150827195311Z</loginTime> <loginDisabled>TRUE</loginDisabled> <isValidated>true</isValidated> <passwordExpirationTime>20160223195311Z</passwordExpirationTime> <mail_aai>[email protected]</mail_aai> </entry> </result> </ns:return> </ns:getInfoResponse> 

Мой второй print_r возвращается так: SimpleXMLElement Object ()

Почему это пусто?

+0

Проверить '$ stringXML' в формате xml или нет! – Saty

+0

Да, я вижу это, но URL-адрес отображаемого xml-кода в моем браузере. Что я делаю не так ? – Charles

+0

Вот что я получаю в своем браузере: этот XML-файл, похоже, не имеет связанной с ним информации о стиле. Дерево документов показано ниже. <нс: getInfoResponse XMLNS: нс = "хххх"> <запись I_Personne = "2291568592"> 10 20150827195311Z ИСТИНА правда 20160223195311Z [email protected] Charles

ответ

1

Ответ на ваш вопрос заключается в том, что вы не можете получить полезный ответ с помощью print_r объекта SimpleXML.

Более полезным ответом было бы то, что вы должны рассмотреть пространство имен и дочерние элементы этого пространства имен.

Поскольку вы раздели URL пространства имен из документа, я заменю пространство имен с URL http://example.org/namespace/

Чтобы получить loginTime для записи, вы могли бы сделать что-то похожее на следующее:

<?php 
$stringXML = '<ns:getInfoResponse xmlns:ns="http://example.org/namespace/"> <ns:return> <result> <entry I_Personne="2291568592"> <loginGraceRemaining>10</loginGraceRemaining> <loginTime>20150827195311Z</loginTime> <loginDisabled>TRUE</loginDisabled> <isValidated>true</isValidated> <passwordExpirationTime>20160223195311Z</passwordExpirationTime> <mail_aai>[email protected]</mail_aai> </entry> </result> </ns:return> </ns:getInfoResponse>'; 

$xml = simplexml_load_string($stringXML); 
$children = $xml->children("http://example.org/namespace/"); //loading the correct namespace and getting the children for it 
echo (string)$children->{"return"}->children()[0]->children()[0]->loginTime; 

Обратите внимание, что могут быть лучшие способы перехода на правильный путь, особенно если у вас более сложный документ.

Смежные вопросы