我有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"]');
我想我差不多了。任何人都可以纠正我在这里做错了什么。
答案 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"]