【发布时间】:2019-08-12 19:52:26
【问题描述】:
我正在开发一个将 RSS 解析为 .csv 格式的简单控制台程序,但我被困在 foreach 循环中。我需要将每个标签写入用逗号分隔的文件,但它只会找到第一个标签并将其存储为对象,因此它会阻止我将其写入文件。
在这个 foreach 循环之前一切正常。程序从命令行获取一个 RSS 链接并创建一个包含全部内容的数组。我可以访问它并在控制台上打印,但是foreach循环只能输出第一次迭代。
$xml = simplexml_load_string($content) or die("Error: Cannot create object");
foreach ($xml->children() as $item) {
echo $item->item->title, ",";
echo $item->item->description, ",";
echo $item->item->link, ",";
echo $item->item->pubDate, ",";
echo $item->item->author, ",";
}
XML 文件如下所示:
<item>
<title></title>
<description></description>
<author></author>
<link></link>
<pubDate></pubDate>
</item>
$item 在使用 return_r 时的输出是:
[0] => SimpleXMLElement Object
(
[title] =>
[description] =>
[author] =>
[link] =>
[pubDate] =>
)
但是当我尝试回显 $item->item->title 时,它只会给我一次迭代的内容。
【问题讨论】:
-
您应该添加一个您正在解析的 XML 示例及其实际给出的结果,这可能会让人们更容易帮助您。此外,您应该在 foreach 的结束标记之前回显一个“\n”,否则您的结果将全部在一行上(这甚至可能是您当前的问题吗?)。
-
我已经添加了控制台中的xml和输出的样子。
-
“XML 文件看起来像这样:” -
item是根元素?然后,您首先不会有多个项目要循环。假设您实际上是指多个此类项目作为不同根元素的子元素,那么您想要访问的路径中只有一个item太多。你想要$item->title等等。 -
不建议“手动”编写 CSV。您应该为数组中的一行收集数据,并使用
fputcsv。 -
感谢您的回复,误会您是对的,我需要将其放入数组并使用 fputcsv。感谢您的帮助。