我想像这样处理一个xml:
<GeocodeResponse>
<status>OK</status>
<result>
<type>street_address</type>
<address_component>
<long_name>Beijing</long_name>
<short_name>Beijing</short_name>
<type>locality</type>
<type>political</type>
</address_component>
<address_component>
<long_name>Beijing</long_name>
<short_name>Beijing</short_name>
<type>administrative_area_level_1</type>
<type>political</type>
</address_component>
</result>
</GeocodeResponse>
我想做的是将节点循环到&lt; address_component&gt;
使用时:
$doc = new DOMDocument();
$doc->loadXML($contents);
$addresses=$doc->getElementsByTagName("address_component");
foreach($addresses as $address){
$nodes = $address->$childNodes; //error arise here
for($i=0;$i<count($nodes);$i++){
//do work
}
}
它始终显示:
Fatal error: Cannot access empty property in C:\xampp\htdocs\read.php on line
$nodes = $address->$childNodes;
虽然它可以正常使用以下代码:
$doc = new DOMDocument();
$doc->loadXML($contents);
$addresses=$doc->getElementsByTagName("address_component");
for($k=0;$k<$addresses->length;$k++){
$type_elements = $addresses->item($k)->getElementsByTagName('type');
//do work
}
我看不出这两种方法的区别,在第一个例子中,当我做'foreach'时,我得到的$ address是一个&lt; address_component&gt;像这样的元素:
<address_component>
<long_name>Beijing</long_name>
<short_name>Beijing</short_name>
<type>administrative_area_level_1</type>
<type>political</type>
</address_component>
正确?
当然它有$ childNodes,如&lt; long_name&gt;,&lt; short_name&gt;等等。
但为什么我得到空房产?
答案 0 :(得分:2)
由于您要访问某个媒体资源,因此childNodes
不应该$
$nodes = $address->childNodes;
当您将$
放在前面时,PHP会尝试将其评估为variable。
在旁注中,您似乎已将error_reporting
禁用或设置得太低,否则您会看到通知告诉您Notice: Undefined variable: childNodes
。您应该在开发计算机上设置error_reporting(-1)
以启用所有错误。