如何使用 Nokogiri 解析 XML 并拆分节点值



我正在使用Nokogiri来解析XML。

doc = Nokogiri::XML("http://www.enhancetv.com.au/tvguide/rss/melbournerss.php")

我不确定如何正确实际检索节点值。

我追求的是titlelink,特别是位于item父节点下的description节点。

<item>
    <title>Toasted TV - TEN - 07:00:00 - 21/12/2011</title>
    <link>http://www.enhancetv.com.au/tvguide/</link>
    <description>Join the team for the latest in gaming, sport, gadgets, pop culture, movies, music and other seriously fun stuff! Featuring a variety of your favourite cartoons.</description>
</item>

我想做的是以这样一种方式title.split("-"),即我可以将日期和时间字符串转换为有效的DateTime对象,以便稍后使用。

由于这是一个 RSS 提要,您可能需要考虑使用 RSS 解析器:

require 'simple-rss'
require 'open-uri'
feed = 'http://www.enhancetv.com.au/tvguide/rss/melbournerss.php'
rss = SimpleRSS.parse open(feed)
rss.items.each do |item|
  puts item.title, item.link, item.description
end

对于您提到的示例标题字符串:

DateTime.parse(s.split(" - ")[-2..-1].join(" "))

这会得到一个日期时间对象:Wed, 21 Dec 2011 07:00:00 +0000

但是您必须密切关注可能需要处理的标题变体。稍微修改一下拆分以满足您的需要。

更新:没有注意到您还需要有关如何解析文档的更多信息。所以这是怎么回事:

doc = Nokogiri::XML(open("http://www.enhancetv.com.au/tvguide/rss/melbournerss.php"))
data = doc.xpath("//item").map do |item|
  [
    item.search("title").first.content,
    item.search("link").first.content,
    item.search("description").first.content
  ]
end

这将加载数据数组中项目的所有标题、链接和描述。Nokogiri::XML接受字符串作为XML文档内容,因此您需要打开URL,然后将结果提供给它。

def parse_time(text)
   items = text.split("-")
   DateTime.strptime("#{items[-2].strip}#{items[-1].strip}", "%H:%M:%S%d/%m/%Y")
end
content = Net::HTTP.get(URI.parse("http://www.enhancetv.com.au/tvguide/rss/melbournerss.php"))
doc = Nokogiri::XML(content){|config| config.noblanks }
doc.search("//item").map{ |node|
   node.children.inject({}) do |hash, node|
     if node.name == "title"
       #or another name
       hash["created_at"] = parse_time(node.text)
     end
     hash[node.name] =  node.text
     hash
   end
}

相关内容

  • 没有找到相关文章

最新更新