以下是来自twitter atom feed的xml的子集:
<entry>
<id>tag:search.twitter.com,2005:18232030105964545</id>
<published>2010-12-24T09:10:29Z</published>
<link type="text/html" rel="alternate" href="http://twitter.com/KTNKenya/statuses/18232030105964545"/>
<title>Synovate Poll: PM Raila Odinga remains the preffered presidential candidate at 42% while Uhuru Kenyatta is at 14%... http://fb.me/yjmMbmBx</title>
<content type="html">Synovate Poll: PM <b>Raila</b> Odinga remains the preffered presidential candidate at 42% while Uhuru Kenyatta is at 14%... <a href="http://fb.me/yjmMbmBx">http://fb.me/yjmMbmBx</a></content>
<updated>2010-12-24T09:10:29Z</updated>
<link type="image/png" rel="image" href="http://a3.twimg.com/profile_images/701825859/NEW_KTN_normal.png"/>
<google:location>nairobi, kenya</google:location>
<twitter:geo>
</twitter:geo>
<twitter:metadata>
<twitter:result_type>recent</twitter:result_type>
</twitter:metadata>
<twitter:source><a href="http://www.facebook.com/twitter" rel="nofollow">Facebook</a></twitter:source>
<twitter:lang>en</twitter:lang>
<author>
<name>KTNKenya (KTN Kenya)</name>
<uri>http://twitter.com/KTNKenya</uri>
</author>
</entry>
从<title>...</title>
元素,我需要通过XPath查询选择超链接 http://fb.me/yjmMbmBx 。我该怎么做?可能吗?
*我是XPath新手。
感谢。
答案 0 :(得分:2)
您有两种选择:
/entry/content[@type="html"]/text()
然后,您需要将其解析为HTML并提取任何标记,并使用这些标记的href属性。最后一部分的执行方式取决于您在此处执行的语言/环境。更新:根据要求为上面的选项1添加了基本示例代码:
xmlpp::Element *node = parser.get_document()->get_root_node();
xmlpp::NodeSet results = node->find("/entry/title/text()");
xmlpp::ContentNode* content = dynamic_cast<xmlpp::ContentNode*>(results.front());
std::string text = content->get_content();
std::string link = "";
int res = text.rfind("http://");
if(res == text.npos)
res = text.rfind("https://");
if(res != text.npos)
link = text.substr(res);
答案 1 :(得分:1)
将atom
前缀绑定到http://www.w3.org/2005/Atom
命名空间URI,请使用:
/atom:feed/atom:entry/atom:title[contains(.,'http://')]
这将选择atom:title
的每个atom:entry
元素子元素,其字符串值包含字符串“http://”。