尝试在php中解析xml时缺少节点

时间:2017-07-08 18:45:59

标签: php xml feed

我使用以下Feed:http://feeds.livep2000.nl/

我尝试使用以下代码行解析它:

$xml = simplexml_load_string(file_get_contents($url), null, LIBXML_NOCDATA);

它向我显示的数据与我预期的一样但却错过geo:latgeo:long,如下所示:

XML

<item>
<title>
<![CDATA[
A2 (DIA: ) some title
]]>
</title>
<link>http://monitor.livep2000.nl?SPI=1707082033480217</link>
<pubDate>Sat, 08 Jul 2017 20:33:48 +0200</pubDate>
<description>
<![CDATA[
1420999 MKA Rotterdam-Rijnmond ( Monitorcode )<br/>1420029 MKA Rotterdam-Rijnmond ( Ambulance 17-129 )<br/>
]]>
</description>
<guid>1707082033480217</guid>
<author/>
<geo:lat>51.8431255</geo:lat>
<geo:long>4.3429498</geo:long>
</item>

响应

    ["item"]=>
        array(50) {
          [0]=>
              object(SimpleXMLElement)#163 (6) {
                ["title"]=>
                string(41) "some title"
                ["link"]=>
                string(48) "http://monitor.livep2000.nl?SPI=1707082036240209"
                ["pubDate"]=>
                string(31) "Sat, 08 Jul 2017 20:36:24 +0200"
                ["description"]=>
                string(44) "description ( Ambulance 09-129 )"
                ["guid"]=>
                string(16) "1707082036240209"
                ["author"]=>
                object(SimpleXMLElement)#213 (0) {
                }
              }

etc....

知道地理节点丢失的原因吗?

1 个答案:

答案 0 :(得分:2)

问题是latlong是所提到的XML中geo命名空间的一部分,simplexml默认情况下不允许您访问它们。

您需要使用以下内容:

$ns = $xml->getNamespaces(TRUE);

foreach ($xml->channel[0]->item as $item) {
    var_dump($item->children($ns['geo'])->lat);
    var_dump($item->children($ns['geo'])->lon);
    // do other stuff with $item here
}