从Atom获取条目的链接

时间:2012-07-03 12:22:02

标签: php xml xpath twitter

我有twitter feed。我试图解析原始推文的链接。它是entry中的第一个feed。我想要获取第一个http://twitter.com/shiplu/statuses/220057421899505664元素的href属性中的网址link

我使用过此xpath /feed/entry[0]/link[@rel = "alternate" and @type = "text/html"]

但它返回空字符串。

代码看起来像这样,

$link = $xml->xpath('/feed/entry[0]/link[@rel = "alternate" and @type = "text/html"]');

我想我差不多了。任何人都可以纠正我在这里做错了什么。

3 个答案:

答案 0 :(得分:1)

编辑 - 根据下面的Vaman评论修正了答案

XPath节点号从1开始,而且该feed使用具有命名空间的Atom格式 - 你应该这样做:

/atom:feed/atom:entry[1]/atom:link[@rel = "alternate" and @type = "text/html"]

其中atom前缀与http://www.w3.org/2005/Atom关联,使用:

$xml->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom'); 

答案 1 :(得分:1)

您指出的Feed包含名称空间。 Xpath表达式也应该考虑名称空间。下面是一个功能完整的表达式,虽然冗长,但与所需的href匹配。

((/*[namespace-uri()='http://www.w3.org/2005/Atom' and contains(name(),'feed')]/*[namespace-uri()='http://www.w3.org/2005/Atom' and contains(name(),'entry')])[1]/*[namespace-uri()='http://www.w3.org/2005/Atom' and contains(name(),'link') and @rel='alternate' and @type='text/html'] )[1]/@href

答案 2 :(得分:0)

这个应该适合你:/feed/entry[1]/link[@rel = "alternate"]