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');
simpleXMLparsing器应该提供一个有意义的错误信息,您可以获取并输出。 查看libxml_get_errors()
的文档中的示例代码。
两件事情:
- 您错过了q1:属性的结束标记。
- SimpleXML无法处理
<q1:Attributes>
types标签。 我将它改为<q1>
,它一直工作到这个标签。
我想你在这里需要SimpleXMLparsing器