我正在解析一个RSS Feed,其中包含一个元素<link>
,其中包含一个url,<link>http://www.google.com/</link>
;但是,当我尝试使用node.css('link').text
获取URL时,它返回一个空字符串。我应该访问另一个属性吗?
我正在使用nokogiri / ruby。
示例:
doc = Nokogiri::HTML(open('http://www.kffl.com/printRSS.php/NFL-ARI'))
doc.css('item').each do |item|
puts item.css('link').text
puts item.css('link').first.text
end
答案 0 :(得分:3)
您正在解析为HTML,但源是XML。在HTML the link
element is empty中,Nokogiri解析与<link></link>http://example.com ...
类似,其中url是link
元素之外的文本节点。然后,当您查询解析的文档时,link
元素为空。
要修复它,您应该解析为XML:
doc = Nokogiri::XML(open('http://www.kffl.com/printRSS.php/NFL-ARI'))
# ...
答案 1 :(得分:0)
尝试获取该选择器返回的“first”项目的文本:
node.css('link').first.text # => "http://www.google.com/"
答案 2 :(得分:0)
我不知道为什么Nokogiri在这里不识别链接,但是在这种情况下xpath一直在拯救:
doc = Nokogiri::HTML(open('http://www.kffl.com/printRSS.php/NFL-ARI'))
doc.css('item').each do |item|
puts item.xpath("//item['link']/text()").text
end
答案 3 :(得分:0)
您可以使用.text?方法确定它是text node。和next方法来获取文本(获取下一个元素)。
doc = Nokogiri::HTML(open('http://www.kffl.com/printRSS.php/NFL-ARI'))
doc.css('item')[0].css('link').first.text?
# => false
doc.css('item')[0].css('link').first.next.text?
# => true
doc.css('item')[0].css('link').first.next.text
# => "http://www.kffl.com/gnews.php?id=901900-cardinals-tyrann-mathieu-expected-to-start-camp-on-pup\n "
我不知道为什么