Hpricot + Ruby XML 解析和逻辑选择。
目标:找到作者 Bob 写的所有标题。
我的 XML 文件:
<rss>
<channel>
<item>
<title>Book1</title>
<pubDate>march 1 2010</pubDate>
<author>Bob</author>
</item>
<item>
<title>book2</title>
<pubDate>october 4 2009</pubDate>
<author>Bill</author>
</item>
<item>
<title>book3</title>
<pubDate>June 5 2010</pubDate>
<author>Steve</author>
</item>
</channel>
</rss>
#my Hpricot, running this code returns no output, however the search pattern works on its own.
(doc % :rss % :channel / :item).each do |item|
a=item.search("author[text()*='Bob']")
#puts "FOUND" if a.include?"Bob"
puts item.at("title") if a.include?"Bob"
end
最佳答案
如果您没有设置 Hpricot,这里是 Nokogiri 中使用 XPath 执行此操作的一种方法:
require 'nokogiri'
doc = Nokogiri::XML( my_rss_string )
bobs_titles = doc.xpath("//title[parent::item/author[text()='Bob']]")
p bobs_titles.map{ |node| node.text }
#=> ["Book1"]
编辑:@theTinMan 的 XPath 也运行良好,可读性更强,而且可能更快:
bobs_titles = doc.xpath("//author[text()='Bob']/../title")
关于ruby - Hpricot XML 文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974304/