我有一个XML提要,我想遍历并显示它的所有子元素,但由于某种原因,我只能输出第一个
饲料——
SimpleXMLElement Object
(
[title] => Lorem Ipsum
[description] => Overall description
[link] => http://someurl.com
[pubDate] => Thu, 17 Jul 2014 10:49:09 +0000
[ttl] => 123
[item] => Array
(
[0] => SimpleXMLElement Object
(
[title] => Lorem Ipsum Dolor 2
[link] => http://someurl.com
[description] => SimpleXMLElement Object
(
)
[pubDate] => Thu, 17 Jul 2014 10:49:09 +0000
[guid] => http://www.someurl.com
)
[1] => SimpleXMLElement Object
(
[title] => Lorem Ipsum Dolor 1
[link] => http://someurl.com
[description] => SimpleXMLElement Object
(
)
[pubDate] => Thu, 17 Jul 2014 10:24:51 +0000
[guid] => http://someurl.com
)
ETC
)
)
PHP - $entries = simplexml_load_file($feed);
foreach ($entries as $entry) {
echo $entry->item->description;
}
不幸的是,我不能影响提要的结构,所以我需要以某种方式能够向下迭代并在item元素处开始循环。想法吗?
SimpleXML可能看起来很神奇,但它并没有神奇到您不必调整它以匹配您正在阅读的XML。
你的问题在这里包含了它自己的答案的萌芽:
不幸的是,我不能影响提要的结构,所以我需要以某种方式能够向下迭代并在item元素处开始循环。想法吗?
你要找的只是一个嵌套循环:从你所描述的(问题中没有太多细节)你有多个"条目",每个包含多个"项"。因此,在您现有的遍历条目的循环中,您需要另一个foreach
循环来依次访问每个item
。
$entries = simplexml_load_file($feed);
foreach ($entries as $entry) {
foreach ($entry->item as $item) {
echo $item->description;
}
}
注意,你有$entry->item->description
,这是返回第一个节点;SimpleXML允许您将其写成$entry->item[0]->description
的简写—即具有该名称的第一个子节点。现在,它被迭代, $entry->item
将改为引用具有该名称的所有子列表,每个子列表将依次分配给$item
。