从XML获取特定标签

时间:2017-09-14 15:47:14

标签: php xml simplexml

我有点问题。

我使用$xml = simplexml_load_file($path);加载XML文件,然后使用print_r($xml);显示它。

结果我得到了这个:

    SimpleXMLElement Object
(    
    [trk] => SimpleXMLElement Object
        (
            [name] => GraphHopper Track
            [trkseg] => SimpleXMLElement Object
                (
                    [trkpt] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [lat] => 44.847241
                                            [lon] => 20.46966
                                        )

                                    [ele] => 69.6
                                    [time] => 2017-09-08T09:42:44Z
                                )

                            [1] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [lat] => 44.847439
                                            [lon] => 20.46906
                                        )

                                    [ele] => 69.6
                                    [time] => 2017-09-08T09:42:56Z
                                )

                        )

                )

        )

)

如何使用PHP中的foreach循环从XML中提取[lat][lon][time]标记?

实际XML文件:

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?><gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="Graphhopper version 0.10" version="1.1" xmlns:gh="https://graphhopper.com/public/schema/gpx/1.1">
<metadata><copyright author="OpenStreetMap contributors"/><link href="http://graphhopper.com"><text>GraphHopper GPX</text></link><time>2017-09-08T09:42:44Z</time></metadata>
<trk><name>GraphHopper Track</name><trkseg>
<trkpt lat="44.847241" lon="20.46966"><ele>69.6</ele><time>2017-09-08T09:42:44Z</time></trkpt>
<trkpt lat="44.847439" lon="20.46906"><ele>69.6</ele><time>2017-09-08T09:42:56Z</time></trkpt>
</trkseg>
</trk>
</gpx>

1 个答案:

答案 0 :(得分:0)

根据您的XML结构,应该这样做:

foreach($sxml->trk->trkseg->trkpt as $data) {
    echo $data['lat'] .  PHP_EOL . $data['lon'] . PHP_EOL . $data->time . PHP_EOL;
}

使用->输入每个级别。 latlon是属性,因此请使用[]

演示:https://3v4l.org/oNLSg