我使用file_get_contents()
从外部网站获取了一个XML文档。在XML中,有一个' time'条目。 (这不包含当前的实时)。这是一个显示结构的示例XML文档:
<?xml version="1.0" encoding="utf-8"?>
<weatherdata>
<location>
<name>New York</name>
<type/>
<country>US</country>
<timezone/>
<location altitude="0" latitude="40.714272" longitude="-74.005966" geobase="geonames" geobaseid="0"/>
</location>
<credit/>
<meta>
<lastupdate/>
<calctime>0.3297</calctime>
<nextupdate/>
</meta>
<sun rise="2015-02-18T11:45:10" set="2015-02-18T22:34:36"/>
<forecast>
<time day="2015-02-18">
<symbol number="600" name="light snow" var="13d"/>
<precipitation value="0.35" type="snow"/>
<windDirection deg="162" code="SSE" name="South-southeast"/>
<windSpeed mps="3.26" name="Light breeze"/>
<temperature day="26.26" min="0.19" max="26.26" night="12.31" eve="14.38" morn="0.19"/>
<pressure unit="hPa" value="1003.66"/>
<humidity value="60" unit="%"/>
<clouds value="clear sky" all="0" unit="%"/>
</time>
<time day="2015-02-19">
<symbol number="600" name="light snow" var="13d"/>
<precipitation value="0.5" type="snow"/>
<windDirection deg="306" code="NW" name="Northwest"/>
<windSpeed mps="9.53" name="Fresh Breeze"/>
<temperature day="16.59" min="2.39" max="16.59" night="2.39" eve="8.37" morn="13.95"/>
<pressure unit="hPa" value="1000.78"/>
<humidity value="45" unit="%"/>
<clouds value="scattered clouds" all="44" unit="%"/>
</time>
<time day="2015-02-20">
<symbol number="800" name="sky is clear" var="01d"/>
<precipitation/>
<windDirection deg="308" code="NW" name="Northwest"/>
<windSpeed mps="10.07" name="Fresh Breeze"/>
<temperature day="13.5" min="0.48" max="14.29" night="0.48" eve="10.08" morn="1.04"/>
<pressure unit="hPa" value="1016.68"/>
<humidity value="41" unit="%"/>
<clouds value="clear sky" all="0" unit="%"/>
</time>
<time day="2015-02-21">
<symbol number="601" name="snow" var="13d"/>
<precipitation value="8.75" type="snow"/>
<windDirection deg="138" code="SE" name="SouthEast"/>
<windSpeed mps="3.93" name="Gentle Breeze"/>
<temperature day="17.87" min="-6.41" max="30.97" night="30.97" eve="24.13" morn="-6.41"/>
<pressure unit="hPa" value="1035.89"/>
<humidity value="0" unit="%"/>
<clouds value="broken clouds" all="65" unit="%"/>
</time>
<time day="2015-02-22">
<symbol number="600" name="light snow" var="13d"/>
<precipitation value="0.05" type="snow"/>
<windDirection deg="289" code="WNW" name="West-northwest"/>
<windSpeed mps="12.12" name="Strong breeze"/>
<temperature day="30.6" min="16.48" max="33.58" night="16.48" eve="23.45" morn="33.58"/>
<pressure unit="hPa" value="1021.45"/>
<humidity value="0" unit="%"/>
<clouds value="clear sky" all="0" unit="%"/>
</time>
<time day="2015-02-23">
<symbol number="600" name="light snow" var="13d"/>
<precipitation value="0.86" type="snow"/>
<windDirection deg="297" code="WNW" name="West-northwest"/>
<windSpeed mps="3.35" name=""/>
<temperature day="19.4" min="11.91" max="19.4" night="15.69" eve="11.91" morn="13.69"/>
<pressure unit="hPa" value="1032.5"/>
<humidity value="0" unit="%"/>
<clouds value="few clouds" all="20" unit="%"/>
</time>
<time day="2015-02-24">
<symbol number="601" name="snow" var="13d"/>
<precipitation value="12.36" type="snow"/>
<windDirection deg="71" code="ENE" name="East-northeast"/>
<windSpeed mps="8.08" name="Fresh Breeze"/>
<temperature day="24.73" min="18.99" max="25.95" night="23.5" eve="25.95" morn="18.99"/>
<pressure unit="hPa" value="1014.9"/>
<humidity value="0" unit="%"/>
<clouds value="overcast clouds" all="100" unit="%"/>
</time>
</forecast>
</weatherdata>
我试图获取时间元素:
$xml->forecast->time[day]
但是返回当前日期。我想这是因为PHP的time()
功能。因此,我无法进一步处理XML树:
<?php
$xmlString = file_get_contents("http://api.openweathermap.org/data/2.5/forecast/daily?q=New York&mode=xml&units=imperial&cnt=7");
$xml = new SimpleXMLElement($xmlString);
$loc = $xml->location->name.", ".$xml->location->country;
$day1 = date('Y-m-d', strtotime('+1 day'));
echo $xml->forecast->time[day1]->symbol['name'];
答案 0 :(得分:2)
首先,您需要使用$day1
- 而不是day1
。你错过了$
。
有了这个,您可以使用xpath查找相关条目:
$xml->forecast->xpath("//time[@day='$day1']")[0]->symbol['name'];
查看有关xpath()
方法的手册页:http://php.net/manual/en/simplexmlelement.xpath.php并了解一般XPath
。
答案 1 :(得分:1)
我不太清楚我是否理解你想要的东西,但是这里是你如何获得xml中所有日期的所有名称:
foreach ($xml->forecast->time as $day){
echo $day->symbol["name"]."<br />";
}
输出:
light snow
light snow
sky is clear
snow
light snow
light snow
snow