Я извлекаю некоторую информацию, используя 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, но то, как это работает .. так замечательный совет .. спасибо .. это сработало для меня