【发布时间】:2014-06-01 15:12:25
【问题描述】:
我正在使用 php 将 rss 提要解析为 json。
使用下面的代码
我的 json 输出包含来自 item 元素的描述数据,但标题和链接数据未提取
- 问题在于 CDATA 不正确或我的代码未正确解析它。
xml 是here
$blog_url = 'http://www.blogdogarotinho.com/rssfeedgenerator.ashx';
$rawFeed = file_get_contents($blog_url);
$xml=simplexml_load_string($rawFeed,'SimpleXMLElement', LIBXML_NOCDATA);
// step 2: extract the channel metadata
$articles = array();
// step 3: extract the articles
foreach ($xml->channel->item as $item) {
$article = array();
$article['title'] = (string)trim($item->title);
$article['link'] = $item->link;
$article['pubDate'] = $item->pubDate;
$article['timestamp'] = strtotime($item->pubDate);
$article['description'] = (string)trim($item->description);
$article['isPermaLink'] = $item->guid['isPermaLink'];
$articles[$article['timestamp']] = $article;
}
echo json_encode($articles);
【问题讨论】:
-
如果我运行您的示例,我的输出将包含一堆
<![CDATA[标签。但是我不确定你是否看到同样的东西?你想删除它们吗?或者您根本看不到他们的内容? -
我没有得到任何标题和链接。它什么也没给我
-
我认为这可能是因为不同的 php/libxml 版本(我在这里运行 5.5.12),也在 php 5.4.29 和 5.3.23 上尝试过,但得到了相同的结果。你用的是什么 PHP 版本?
-
@my localhost 我什至在服务器上使用 5.5.6。将 xml 解析为 json 后,我在 localhost 和服务器上都获得了链接和标题的空白值......但是我尝试将 xml 下载到文件并解析得到相同的结果.....我尝试过的一件事是放 标签我能够成功完全解析....但仍然不能解决问题
-
注意
trim()总是返回一个字符串,所以(string)trim($item->title)中的(string)什么都不做;如果有的话,您需要转换它的 input,这将是trim((string)$item->title),尽管它可能会隐含地这样做。但是,您应该转换其他值,例如$article['link'] = (string)$item->link;在将它们传递给其他函数之前。