ruby - Hpricot XML 文本搜索

标签 ruby xml hpricot

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/

相关文章:

ruby - 用两个数组确定一手扑克牌

ruby - 使用ruby操作.csv文件 : Multiplying two columns together

javascript - 任何 Ruby 的 HTML 解析器都可以执行 JavaScript 来查看生成的 DOM 吗?

ruby-on-rails - PostsController 中的 ActiveModel::ForbiddenAttributesError#create

xml - 使用XSLT重命名XML节点的所有子节点

.NET 的 System.Xml.Schema 类的 Java 等价物?

xml - XSLT 总结值

html - hpricot 将属性添加到 HTML 标记?

ruby-on-rails - 通过 ember-cli-rails 在 Rails 引擎中使用 Ember 引擎