Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何循环遍历XML的多个子节点?_Php_Xml_Loops - Fatal编程技术网

Php 如何循环遍历XML的多个子节点?

Php 如何循环遍历XML的多个子节点?,php,xml,loops,Php,Xml,Loops,我在尝试循环浏览XML文档时遇到了一些问题。XML如下所示: <data> <weather> <hourly> <time>0</time> <tempC>17</tempC> <tempF>62</tempF> <windspeedMiles>24</windspeedMiles>

我在尝试循环浏览XML文档时遇到了一些问题。XML如下所示:

<data>
<weather>
    <hourly>
        <time>0</time>
        <tempC>17</tempC>
        <tempF>62</tempF>
        <windspeedMiles>24</windspeedMiles>
        <windspeedKmph>39</windspeedKmph>
    </hourly>
    <hourly>
        <time>3</time>
        <tempC>16</tempC>
        <tempF>60</tempF>
        <windspeedMiles>22</windspeedMiles>
        <windspeedKmph>35</windspeedKmph>
    </hourly>
</weather>
<weather>
    <hourly>
        <time>0</time>
        <tempC>17</tempC>
        <tempF>62</tempF>
        <windspeedMiles>24</windspeedMiles>
        <windspeedKmph>39</windspeedKmph>
    </hourly>
    <hourly>
        <time>3</time>
        <tempC>16</tempC>
        <tempF>60</tempF>
        <windspeedMiles>22</windspeedMiles>
        <windspeedKmph>35</windspeedKmph>
    </hourly>
</weather>
</data>

0
17
62
24
39
3.
16
60
22
35
0
17
62
24
39
3.
16
60
22
35
我的代码(如下)在遍历所有“weather”节点时,只选择第一个“hourly”子节点,而完全跳过第二个。如果我是诚实的,有人能帮助我吗?我对循环的了解还不够,无法修复它,它让我发疯!Grr

下面是我的PHP代码,它从online加载一个XML文档,然后将XML结果格式化为div标记,并显然在XML中循环,但正如我所说的,只在每个“weather”节点的第一个“hourly”节点中循环

<?php
// load SimpleXML
$data = new SimpleXMLElement('myOnlineXMLdocument.xml', null, true);
echo <<<EOF
<div class="observationRow">
    <div class="observationTitleSmall"><br>Time</div>
    <div class="observationTitleSmall"><br>Temp C</div>
    <div class="observationTitleSmall"><br>Temp F</div>
    <div class="observationTitleSmall"><br>Wind Speed MPH</div>
    <div class="observationTitleSmall"><br>Wind Speed KMPH</div>
</div>
EOF;
foreach($data as $weather) // loop through our hours
{
echo <<<EOF
    <div>
        <div class="observationCellSmall"><br>{$weather->time}</div>
        <div class="observationCellSmall"><br>{$weather->tempC}</div>
        <div class="observationCellSmall"><br>{$weather->tempF}</div>
        <div class="observationCellSmall"><br>{$weather->hourly->windspeedMiles}</div>
        <div class="observationCellSmall"><br>{$weather->hourly->windspeedKmph}</div>
EOF;
}
echo    '</div>';
?>
windspeedKmph}
EOF;
}
回声';
?>
编辑的代码:

$str = "";
foreach($data->weather as $weather)
{
    foreach ($weather->hourly as $hour)
    {
        $str .= "
    <div>";

        if ($hour->time == "0") {
            $str .= "
        <div class='observationCellSmall'><br>$weather->date</div>
        <div class='observationCellSmall'><br>$weather->maxtempC</div>
        <div class='observationCellSmall'><br>$weather->mintempC</div>";
        }

        $str .= "
        <div class='observationCellSmall'><br>$hour->time</div>
        <div class='observationCellSmall'><br>$hour->tempC</div>
        <div class='observationCellSmall'><br>$hour->tempF</div>
        <div class='observationCellSmall'><br>$hour->windspeedMiles</div>
        <div class='observationCellSmall'><br>$hour->windspeedKmph</div>
    </div>
    ";
    }
}
echo $str;
$str=”“;
foreach($data->weather as$weather)
{
foreach($weather->hourly作为$hour)
{
$str.=”
";
如果($hour->time==“0”){
$str.=”

$weather->date
$weather->maxtempC
$weather->mintempC”; } $str.=”
$hour->time
$hour->tempC
$hour->tempF
$hour->windspeedMiles
$hour->windspeedKmph "; } } echo$str;
使用XML提要的精简版本生成以下内容:

   <div>
        <div class='observationCellSmall'><br>2013-08-19</div>
        <div class='observationCellSmall'><br>17</div>
        <div class='observationCellSmall'><br>15</div>
        <div class='observationCellSmall'><br>0</div>
        <div class='observationCellSmall'><br>15</div>
        <div class='observationCellSmall'><br>59</div>
        <div class='observationCellSmall'><br>11</div>
        <div class='observationCellSmall'><br>18</div>
    </div>

    <div>
        <div class='observationCellSmall'><br>300</div>
        <div class='observationCellSmall'><br>15</div>
        <div class='observationCellSmall'><br>59</div>
        <div class='observationCellSmall'><br>13</div>
        <div class='observationCellSmall'><br>21</div>
    </div>

    <div>
        <div class='observationCellSmall'><br>2013-08-20</div>
        <div class='observationCellSmall'><br>21</div>
        <div class='observationCellSmall'><br>16</div>
        <div class='observationCellSmall'><br>0</div>
        <div class='observationCellSmall'><br>17</div>
        <div class='observationCellSmall'><br>62</div>
        <div class='observationCellSmall'><br>11</div>
        <div class='observationCellSmall'><br>18</div>
    </div>

    <div>
        <div class='observationCellSmall'><br>300</div>
        <div class='observationCellSmall'><br>16</div>
        <div class='observationCellSmall'><br>61</div>
        <div class='observationCellSmall'><br>10</div>
        <div class='observationCellSmall'><br>17</div>
    </div>


2013-08-19
十七,
十五
0
十五
59
十一,
十八
三百
十五
59
十三,
二十一,
2013-08-20
二十一,
十六,
0
十七,
62
十一,
十八
三百
十六,
61
十,
十七,
您需要一个嵌套循环。一个绕着天气转,另一个绕着霍尔里转

foreach($data->weather as $weather) {
   foreach($weather->hourly as $hourly) {
     // code here
   }
}
我不记得simplexml API是100%在我脑海中出现的,如果它不起作用,您可能需要使用
->getChildren()
或其他一些东西使其可移植


或者直接使用xpath和nab的hourlies:
/data/weather/hourly

好的,发布它。希望能有帮助。嗨,杰夫,这似乎工作得很好!我知道我需要一个循环中的一个循环,但这是我能想到的最接近“解决方案”。然而,你发布的这篇文章似乎能完成这项工作,我非常感谢。我将把CSS放在一起,如果你不介意的话,我还有一个问题要问,但是我需要先对CSS进行编码。关于其他问题,我是将此页标记为已解决还是保留打开状态?对不起,这里是新的@Stephen如果另一个问题与此处的问题密切相关,请在此处发布。我再回答一次,你可以在两个方面都超过我。:-)如果问题有点不同,那么它应该是一个新问题。我们的想法是,我们正在创建一个各种各样的档案,独特的问题需要作为独特的问题进行搜索。谢谢杰夫。我会很快从你身边跑过去。现在,通过您的编辑,一切都很顺利。虽然不是在我上面的代码中,而且每个天气节点都有多个小时节点,但我也只有一个日期节点(因此它只列出一次,而不是像小时节点那样列出多次)。有没有办法只列出一次日期和多个小时记录。我不确定我是否清楚,但如果你看下面的链接,天气在表格中,但日期只列出一次:@Stephen我肯定有。我需要查看XML才能有更好的想法。一个链接到整个东西将是理想的,或者你可以拼凑一个简化的模型我晚上很晚了,但我会看看我能做些什么。谢谢杰夫。下面是我实际使用的XML的链接:。这里有一个链接,指向我在你的帮助下迄今为止所取得的成就:但正如你将看到的那样,日期以每小时列出,但日期只需要为一天中的每一组小时列出。我在这里的例子中使用了表格,但我想最终会切换到div。嗨,马克,谢谢你的快速回复。我想我已经设法让它与杰夫斯代码,但我也感谢你的帮助。史蒂芬:没问题,不客气。如果他的回答解决了你的问题,你应该向我们双方投票,接受他的回答。