Привет, вот мой xml-файл: (thefile)
<?xml version="1.0" encoding="utf-8"?> <ArrayOfItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://nts-de-osm1-pxc/webservices/"> <Item xmlns:q1="http://systinet.com/wsdl/com/osm/webservices/service/" xsi:type="q1:Document"> <q1:attributes> <q1:Attribute> <q1:dataDictionary xsi:nil="true" /> <q1:dataType>string</q1:dataType> <q1:displayName>AEND_DATUM</q1:displayName> <q1:key>false</q1:key> <q1:name>AEND_DATUM</q1:name> <q1:searchable>true</q1:searchable> <q1:userAttribute>true</q1:userAttribute> <q1:value>10.05.10</q1:value> </q1:Attribute> <q1:Attribute> <q1:dataDictionary xsi:nil="true" /> <q1:dataType>string</q1:dataType> <q1:displayName>AEND_PRUEF_DATUM</q1:displayName> <q1:key>false</q1:key> <q1:name>AEND_PRUEF_DATUM</q1:name> <q1:searchable>true</q1:searchable> <q1:userAttribute>true</q1:userAttribute> <q1:value>10.05.10</q1:value> </q1:Attribute> </q1:attributes> </Item> </ArrayOfItem>
Вот мой код
$xml = simplexml_load_file($thefile); print_r($xml);
Это результат
SimpleXMLElement Object ( [Item] => SimpleXMLElement Object ( ) )
Почему это пусто?
Не используйте print_r () или var_dump () для проверки SimpleXMLElement, они не обязательно будут работать на них, потому что SimpleXML использует много волшебства за сценой. Вместо этого посмотрите, что возвращает asXML()
.
В вашем случае он не показывает <q1:attributes/>
потому что они не находятся в одном пространстве имен.
Для доступа к этим узлам с именами существует много разных способов, большинство из которых обсуждаются здесь в Stack Overflow . Если вы не можете это решить, пожалуйста, откройте новый вопрос, так как тема отличается. Вот три способа доступа к этим элементам:
$ArrayOfItem->Item->children("http://systinet.com/wsdl/com/osm/webservices/service/"); $ArrayOfItem->Item->children('q1', true); $ArrayOfItem->Item->xpath('//q1:Attribute');
Парсер simpleXML должен предоставить содержательное сообщение об ошибке, которое вы можете получить и вывести. Посмотрите пример кода в документации по libxml_get_errors()
.
Две вещи:
<q1:Attributes>
. Я изменил его на <q1>
и он работает до этого тега. Я думаю, вам нужен синтаксический анализатор SimpleXML здесь