2

嗨,我从未使用过 xml,但现在需要,所以我正在努力快速学习,但在我认为的结构上挣扎。这只是为了在某人的网站顶部显示天气。

我想使用这个 xml 链接ftp://ftp2.bom.gov.au/anon/gen/fwo/IDV10753.xml显示墨尔本天气

基本上我正在尝试获取墨尔本 3 天的预测(无论什么都有效)有一个预测期数组 [0] 到 [6]

我用这个 print_r 来查看结构:

$url = "linkhere";
$xml = simplexml_load_file($url);
echo "<pre>";
print_r($xml);

并尝试这样做只是为了得到一些东西:

$url = "linkhere";
$xml = simplexml_load_file($url);

$data = (string) $xml->forecast->area[52]->description;
echo $data;

这没有给我任何东西(预计是“墨尔本”),显然我需要学习,但如果有人可以提供帮助,那就太好了。

4

2 回答 2

0

这是一个适合您的工作示例:

<?php

$forecastdata = simplexml_load_file('ftp://ftp2.bom.gov.au/anon/gen/fwo/IDV10753.xml','SimpleXMLElement',LIBXML_NOCDATA);

    foreach($forecastdata->forecast->area as $singleregion) {
    $area = $singleregion['description'];
    $weather = $singleregion->{'forecast-period'}->text;
    echo $area.': '.$weather.'<hr />';  
    }

?>

您可以编辑上述示例以提取所需的标签和属性。

永远记住,理解 XML 对象结构的一个好习惯是使用例如打印出它的内容,print_r

在您提出的 XML 的特定情况下,城市是通过属性(描述)指定的。出于这个原因,您还必须使用 ['attribute name'] 阅读这些属性(有关更多信息,请参见此处)。

另请注意,标记{'forecast-period'}被包裹在大括号中,因为它包含连字符,否则会产生错误。

于 2013-09-30T05:01:12.497 回答
0

因为description是 的一个属性<area>,所以需要使用

$data = (string) $xml->forecast->area[52]['description'];

我也不会依赖墨尔本成为第 52 个区域节点(尽管这实际上取决于数据维护者)。我会通过它的aac属性,因为这似乎是独一无二的,例如

$search = $xml->xpath('forecast/area[@aac="VIC_PT042"]');
if (count($search)) {
    $melbourne = $search[0];
    echo $melbourne['description'];
}
于 2013-09-30T04:19:20.680 回答