我正在使用以下代码阅读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
循环就无法读取所有项目。
答案 0 :(得分:0)
好$x->channel->item
是array-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将一次一个地访问这些元素。