使用 simplexml_load_file() 难以解析原子提要,无法获取属性
我正在尝试创建一个社交时间表。我从某些地方获取提要,这样我就有了我所做的事情的时间表。我遇到的问题是 Google 阅读器共享项目。
我想获取我共享
中包含的项目的时间尝试使用 $date 获取元素= $xml->entry[$i]->link->attributes()->gr:crawl-timestamp-msec;
失败,因为 gr 后面的 : 会导致 PHP 错误。我可以弄清楚如何获取该元素,所以我想使用下面的代码更改名称,但它会抛出以下错误
Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning :无法加载外部实体“<?xml version =“1.0”?>
<?php
$get_feed = file_get_contents('http://www.google.com/reader/public/atom/user/03120403612393553979/state/com.google/broadcast');
$old = "gr:crawl-timestamp-msec";
$new = "timestamp";
$xml_file = str_replace($old, $new, $get_feed);
$xml = simplexml_load_file($xml_file);
$i = 0;
foreach ($xml->entry as $value)
{
$id = $xml->entry[$i]->id;
$date = date('Y-m-d H:i:s', strtotime($xml->entry[$i]->attributes()->timestamp ));
$text = $xml->entry[$i]->title;
$link = $xml->entry[$i]->link->attributes()->href;
$source = "googleshared";
echo "date = $date<br />";
$sql="INSERT IGNORE INTO timeline (id,date,text,link, source) VALUES ('$id', '$date', '$text', '$link', '$source')";
mysql_query($sql);
$i++;
}`
有人可以给我指出正确的方向吗?
欢呼
克雷格
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题是因为
crawl-timestamp-msec
位于不同的命名空间中。在文档中的某个位置(通常是根元素,在您的情况下看起来是
),它将具有类似于xmlns:gr="http 的属性://some/url/here”
。这表示文档将使用http://some/url/here
命名空间中的内容,并将为所有这些内容添加前缀gr
。[编辑:有问题的 URL 是
http://www.google.com/schemas/reader/atom/
]要访问它,您需要更改
为
(编辑:该属性位于 < code> 元素,而不是
,看起来)
The problem is because
crawl-timestamp-msec
is in a different namespace. Somewhere in the document (usually the root element, which looks to be<feed/>
in your case), it will have an attribute along the lines ofxmlns:gr="http://some/url/here"
. This says that the document will be using things from thehttp://some/url/here
namespace, and will prefix all of these things withgr
.[Edit: the URL in question is
http://www.google.com/schemas/reader/atom/
]To access it, you need to change
to
(Edit: the attribute is on the
<entry/>
element, not the<link/>
, it seems)