我有一个XML源,我想循环并显示它的所有子元素,但由于某种原因我只能输出第一个,
Feed -
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;
}
不幸的是我不能影响feed的结构,所以我需要以某种方式迭代并在item元素处开始我的循环。想法?
答案 0 :(得分:1)
SimpleXML看似神奇,但它不是那么神奇,你不必修改它以匹配你正在阅读的XML。
你的问题包含了自己答案的细菌:
不幸的是,我不能影响feed的结构,所以我需要以某种方式迭代并在item元素处开始我的循环。想法?
您正在寻找的并不比嵌套循环更复杂:根据您所描述的内容(问题中没有太多详细信息)您有多个"条目& #34;,每个包含多个"项目"。因此,在现有的条目循环中,您需要另一个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
。