我正在尝试使用内置的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
如何获得此位置值?
答案 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/')