Intereting Posts

SimpleXML и print_r () – почему это пусто?

Привет, вот мой 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:.
  • SimpleXML не может обрабатывать теги <q1:Attributes> . Я изменил его на <q1> и он работает до этого тега.

Я думаю, вам нужен синтаксический анализатор SimpleXML здесь