【问题标题】:Foreach statement only outputting one record when parsing an XML fileForeach 语句在解析 XML 文件时只输出一条记录
【发布时间】:2011-08-07 18:43:17
【问题描述】:

我正在尝试解析一个 XML 文件,以便从<pid> 以“b”开头的标签中获取所有记录,如图所示:

xml 文件的链接是:

http://www.bbc.co.uk/radio1/programmes/schedules/england.xml

我目前的代码是:

<?php

$xml = simplexml_load_file('http://www.bbc.co.uk/radio1/programmes/schedules/england.xml');
foreach($xml->day>broadcasts->broadcast as $pid){
echo $pid->programme->pid;
}
?>

据我所知,foreach statement 应该回显所有 pid 记录,它只执行第一个记录。

关于我的代码在哪里出错以及如何使其全部输出的任何想法?

【问题讨论】:

  • 你的意思是$xml-&gt;day-&gt;broadcasts-&gt;broadcast

标签: php xml foreach simplexml


【解决方案1】:

您的循环需要更深一层,因为programme 节点是单个broadcast 节点的多个子节点。因此,您需要遍历每个broadcast 节点中的所有programme 节点以回显它们的pid

foreach($xml->day>broadcasts->broadcast as $broadcast){

  // Loop over all <programme> contained in each <broadcast>
  foreach ($broadcast->programme as $prog) {
    echo $prog->pid;
  }
}

【讨论】:

    【解决方案2】:

    您正在遍历整个 xml 结构,其中仅包含一个“day”节点。

    你应该首先将你的“光标”放在你想要迭代的元素的父元素上:

    <?php 
    
    $xml = simplexml_load_file('http://www.bbc.co.uk/radio1/programmes/schedules/england.xml');
    $broadcasts = $xml->day->broadcasts;
    foreach($broadcasts->broadcast as $bc) {
        echo $bc->programme->pid;
    }
    

    【讨论】:

    • 谢谢,我的错。我编辑了我的帖子,虽然原理保持不变
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多