为什么我的XML数组无法调用?

时间:2012-11-19 14:20:59

标签: php xml arrays

我正在尝试使用PHP调用XML数组,但无论出于何种原因,它都无法正确提供结果。 XML看起来像simpleXMLElement。

SimpleXMLElement对象 (     [@attributes] =>排列         (             [copyright] =>所有数据版权归2012年。         )

[route] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [tag] => 385
                [title] => 385-Sheppard East
                [color] => ff0000
                [oppositeColor] => ffffff
                [latMin] => 43.7614499
                [latMax] => 43.8091799
                [lonMin] => -79.4111
                [lonMax] => -79.17073
            )

        [stop] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [tag] => 14798
                                [title] => Sheppard Ave East At Yonge St (Yonge Station)
                                [lat] => 43.7614499
                                [lon] => -79.4111
                                [stopId] => 15028
                            )

                    )
              [1] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [tag] => 4024
                                [title] => Sheppard Ave East At Doris Ave
                                [lat] => 43.7619499
                                [lon] => -79.40842
                                [stopId] => 13563
                            )

                    )

stop数组有几个部分。我的代码如下所示:

$url = "this_url";
$content = file_get_contents($url);
$xml = new SimpleXMLElement($content);
$route_array = $xml->route->stop;

当我打印$ route_array时,它只显示来自停靠点的1条记录。我需要通过循环运行吗?通常,当我在JSON中执行此操作时,它可以正常工作。我想只在停止数组中获取所有内容。

先谢谢所有专家帮助像我这样的初学者

1 个答案:

答案 0 :(得分:1)

在SimpleXML元素上使用print_r并不总能为您提供完整的图片。你的元素在那里,但没有显示。

$xml->route->stop<stop><route>个标记的数组。因此,如果您想循环遍历每个停止标记,那么:

foreach($xml->route->stop as $stop)
{
    echo (string)$stop; // prints the value of the <stop> tag
}

在循环中,$stop是一个SimpleXML元素,因此为了打印它的值,您可以使用(string)语法将整个元素转换为字符串。您仍然可以访问属性和其他SimpleXML元素属性。

如果你知道要定位哪个<stop>元素,那么你可以直接得到它:

echo (string)$xml->route->stop[1]; // prints the second <stop> value