Intereting Posts
ksort на многомерном массиве Пользовательский интерфейс jQuery Sortable с Laravel не отправит Могут ли серверы блокировать запросы на завивки? Laravel 4 Queue – В пространстве имен «queue» нет команд Как включить SSL на сервере WAMP? Какие проблемы безопасности могут возникнуть при представлении phpinfo () конечным пользователям? Как загрузить SVG-файл, который был сгенерирован с помощью PHP? Как автоматизировать миграцию (схему и данные) для приложения PHP / MySQL XPath получает значение атрибута в PHP Невозможно исключить каталоги из PHPDocumentor jquery не будет работать в файле, полученном с помощью java select include Confusion PDO-only проблема: невозможно подключиться через сокет / Access denied / не удается подключиться к серверу (общий хост) multi textfield с автозаполнением, но почему только первый .htaccess переписать правило для принудительного перенаправления https на http Значение переменной Javascript \ textarea для переменной PHP

Simplexml_load_string ($ string) возвращает пустой объект, но $ string содержит xml? код ниже

Я извлекаю некоторую информацию, используя cURL в формате xml.

.... $xml = curl_exec($ch); $data = simplexml_load_string($xml); print_r($data); //out put - SimpleXMLElement Object ( ) 

если я попробую – print_r($xml); и просмотр источника страницы, который я получаю

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns7:users xmlns="http://www.example.com/xml/ns/rs" xmlns:ns2="http://www.example.com/xml/ns/users" xmlns:ns3="http://www.example.com/2004/11/tHistory" xmlns:ns4="http://www.example.com/fsi/tHistory" xmlns:ns5="http://www.example.com/2005/10/tHistory" xmlns:ns6="http://www.example.com/2010/03/cs" xmlns:ns7="http://www.example.com/2005/10/users" xmlns:ns8="http://www.example.com/2010/03/tHistory"> <ns7:user><ns7:id>Matt.Smith</ns7:id> <ns7:lastName>Smith</ns7:lastName> <ns7:firstName>Matt</ns7:firstName> <ns7:otherName></ns7:otherName> <ns7:gender>male</ns7:gender> <ns7:email>matt@company.co.uk</ns7:email> <ns7:locale>en</ns7:locale> <ns7:role><ns7:id>A</ns7:id> <ns7:name>System Administrator</ns7:name></ns7:role> <ns7:employeeNumber></ns7:employeeNumber> <ns7:organization> <ns7:id>8000</ns7:id> <ns7:name>Organisation Title</ns7:name> </ns7:organization> <ns7:organization> <ns7:id>20707</ns7:id> <ns7:name>London Office</ns7:name> </ns7:organization> <ns7:attribute> <ns7:code>0</ns7:code> <ns7:description>Unassigned</ns7:description> </ns7:attribute> <ns7:attribute> <ns7:code>0</ns7:code> <ns7:description>Unassigned</ns7:description> </ns7:attribute> <ns7:attribute> <ns7:code></ns7:code> <ns7:description>Unassigned</ns7:description> </ns7:attribute> <ns7:attribute> <ns7:code></ns7:code> <ns7:description>Unassigned</ns7:description></ns7:attribute> <ns7:attribute><ns7:code></ns7:code> <ns7:description>Unassigned</ns7:description> </ns7:attribute> <ns7:attribute> <ns7:code></ns7:code> <ns7:description>Unassigned</ns7:description> </ns7:attribute> <ns7:attribute> <ns7:code></ns7:code> <ns7:description>Unassigned</ns7:description> </ns7:attribute> <ns7:attribute> <ns7:code></ns7:code> <ns7:description>Unassigned</ns7:description> </ns7:attribute> </ns7:user> </ns7:users> 

этот xml находится в одной строке, и я вручную ввел разрывы строк, чтобы сделать его доступным для чтения.

UPDATE : для печати первого имени (или любого другого) вы можете использовать обычные механизмы адресации SimpleXML . ваш случай немного сложнее, потому что вы используете пространства имен. все еще работоспособный – попробуйте что-то вроде этого :

 $data->children('ns7', true)->user[0]->lastName 

re: Я ожидаю print_r($data) для печати, как если бы это был массив […] : это ожидание неверно. это было бы удобно, но это не так, как это работает. для печати строкового представления XML-объекта asXML() используйте asXML() .

ОБНОВЛЕНИЕ КОНЕЦ

что вы ожидаете print_r($data) для печати? SimpleXMLElement Object ( ) кажется, отлично подходит для меня. это не значит, что с xml что-то не так. если вы хотите увидеть фактический xml объекта SimpleXMLElement, попробуйте print $data->asXML() .

Ну, это не пустой объект. Действительно, если вы печатаете_r, это показывает, что вы показали нам. Но если вы, например,

 echo $data->asXML(); 

результат будет правильным:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns7:users xmlns="http://www.example.com/xml/ns/rs" xmlns:ns2="http://www.example.com/xml/ns/users" xmlns:ns3="http://www.example.com/2004/11/tHistory" xmlns:ns4="http://www.example.com/fsi/tHistory" xmlns:ns5="http://www.example.com/2005/10/tHistory" xmlns:ns6="http://www.example.com/2010/03/cs" xmlns:ns7="http://www.example.com/2005/10/users" xmlns:ns8="http://www.example.com/2010/03/tHistory"> <ns7:user><ns7:id>Matt.Smith</ns7:id> <ns7:lastName>Smith</ns7:lastName> <ns7:firstName>Matt</ns7:firstName> <ns7:otherName/> <ns7:gender>male</ns7:gender> <ns7:email>matt@company.co.uk</ns7:email> <ns7:locale>en</ns7:locale> <ns7:role><ns7:id>A</ns7:id> <ns7:name>System Administrator</ns7:name></ns7:role> <ns7:employeeNumber/> ... 

Просто используйте объект как simpleXML для 🙂

Чтобы проверить, правильно ли он загружен, см. Документ:

Ошибки / Исключения

Выдает сообщение об ошибке E_WARNING для каждой ошибки, обнаруженной в XML-данных, и выдает исключение, если обнаружены ошибки.

на странице

Или, чтобы var dump удалил ns7 namespacing из узлов, оставьте их в корне:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns7:users xmlns="http://www.example.com/xml/ns/rs" xmlns:ns2="http://www.example.com/xml/ns/users" xmlns:ns3="http://www.example.com/2004/11/tHistory" xmlns:ns4="http://www.example.com/fsi/tHistory" xmlns:ns5="http://www.example.com/2005/10/tHistory" xmlns:ns6="http://www.example.com/2010/03/cs" xmlns:ns7="http://www.example.com/2005/10/users" xmlns:ns8="http://www.example.com/2010/03/tHistory"> <user><id>Matt.Smith</id> <lastName>Smith</lastName> <firstName>Matt</firstName> <otherName></otherName> <gender>male</gender> <email>matt@company.co.uk</email> <locale>en</locale> <role><id>A</id> <name>System Administrator</name></role> <employeeNumber></employeeNumber> <organization> <id>8000</id> <name>Organisation Title</name> </organization> <organization> <id>20707</id> <name>London Office</name> </organization> <attribute> <code>0</code> <description>Unassigned</description> </attribute> <attribute> <code>0</code> <description>Unassigned</description> </attribute> <attribute> <code></code> <description>Unassigned</description> </attribute> <attribute> <code></code> <description>Unassigned</description></attribute> <attribute><code></code> <description>Unassigned</description> </attribute> <attribute> <code></code> <description>Unassigned</description> </attribute> <attribute> <code></code> <description>Unassigned</description> </attribute> <attribute> <code></code> <description>Unassigned</description> </attribute> </user> </ns7:users> 

Да, у меня была такая же проблема и я подумал, что simplexml_load_string возвращается пустым, поскольку print_r ($ data) или echo $ data просто возвращаются пустым.

но если вы делаете $ data-> name, тогда вы получаете достоверные данные. Это любопытное wierd, но то, как это работает .. так замечательный совет .. спасибо .. это сработало для меня