0

我有这个推特提要。我正在尝试解析原始推文的链接。它是第一个entryfeed我想获取第一个元素的 urlhttp://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"]');

我想我快到了。谁能纠正我在这里做错了什么。

4

3 回答 3

1

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

XPath 节点编号从 1 开始,此外,该提要使用具有命名空间的 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'); 
于 2012-07-03T13:23:10.030 回答
1

您指出的提要包含名称空间。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

于 2012-07-03T16:21:35.313 回答
0

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

于 2012-07-03T13:26:09.767 回答