在php中阅读feed

时间:2014-05-01 07:15:10

标签: php

我正在使用以下代码阅读xml feed:

    $content = file_get_contents($feed_url);
    $x = new SimpleXmlElement($content);
    echo '<pre>';
    print_r($x -> channel -> item);
    die;

问题在于$x -> channel -> item我只得到项目的第一个数组元素。当我使用时,

   foreach($x -> channel -> item as $entry) {
        // code
    }

然后列出所有项目。我只需要澄清一下,在上面的代码中,为什么没有foreach循环就无法读取所有项目。

2 个答案:

答案 0 :(得分:0)

$x->channel->itemarray-like所以要获得每个项目,使用foreach或其他循环迭代它是有意义的。

直接获取单个元素,例如:

echo $x->channel->item[0];
echo $x->channel->item[1];

答案 1 :(得分:0)

根据您使用的PHP版本,此行为会有所不同。

不同版本的PHP的不同结果

例如此示例代码

$x = new SimpleXmlElement("<xml>
  <channel>
    <item>baz</item>
    <item>bax</item>
    <item>bay</item>
  </channel>
</xml>");

print_r($x -> channel -> item);

php 5.2.17上运行会显示第一项:

示例:http://codepad.viper-7.com/B2DyFE

输出:

SimpleXMLElement Object ( [0] => baz )

而在最新开发版本php 5.5-dev上运行的此代码将输出所有元素。

示例:http://codepad.viper-7.com/z3ML9n

输出:

SimpleXMLElement Object ( [0] => baz [1] => bax [2] => bay )

使用foreach 迭代它的原因是SimpleXMLElement实现了Traversable as documented here,因此foreach将一次一个地访问这些元素。