位置元素未从堆栈溢出作业RSS源解析

时间:2017-02-17 04:41:34

标签: ruby rss

我正在尝试使用内置的Ruby RSS解析器从Stack Overflow Jobs搜索(URL)解析RSS提要。出于某种原因,我无法从Feed访问Location元素。

崩溃
 undefined method `location' for #<RSS::Rss::Channel::Item:0x000000020db720> (NoMethodError)

我能够获得其他元素(标题,描述,链接等),但不能获取位置

代码

require 'rss'
require 'open-uri'

url = "https://stackoverflow.com/jobs/feed?q=%5bruby%5d&l=New+York%2c+NY%2c+United+States&d=20&u=Miles"
open(url) do |rss|
    feed = RSS::Parser.parse(rss)
    puts "Title: #{feed.channel.title}"
    feed.items.each do |item|
        puts item.title
        puts item.location
    end
end

如何获得此位置值?

screenshot of formatted xml

1 个答案:

答案 0 :(得分:0)

由于某种原因,location元素具有命名空间(xmlns属性)。我无法在Ruby RSS模型中找到有关如何使用命名空间的任何内容,但使用Nokogiri您可以定义自定义命名空间并使用XPath(nokogiri docs)解析location属性。

require 'nokogiri'
require 'open-uri'

# Open the URL with Nokogiri XML parser
xml = Nokogiri::XML(open("http://stackoverflow.com/jobs/feed?q=%5Bruby%5D&l=New%20York%2C%20NY%2C%20United%20States&d=20&u=Miles"))

# xml.xpath('XPath', 'custom_namespace' => "http://namespace/url")
puts xml.xpath('//rss/channel/item/so:location', 'so' => 'http://stackoverflow.com/jobs/')