从URL访问的XML文件中的Nokogiri解析格式不正确



目前我正在尝试解析BBC提供的XML文档。然而,我正在对Ruby实际得到的东西进行简单的检查,它似乎缺少了很多细节。

require 'open-uri'
require 'nokogiri'
class MainController < ApplicationController
def index
    @xml = Nokogiri::XML(open("http://www.bbc.co.uk/bbcone/programmes/schedules/scotland/2013/12/13.xml"))
    render :text => @xml
    end
end

我从输出中得到的只是一堆不连贯的文本:

 p01ml65v 2013-12-13T00:20:00Z 2013-12-13T00:25:00Z 300 b03ktclr Detailed weather forecast. audio_video 300 p01lc1h3 Skiing Weatherview 2013-12-13T00:20:00Z b007yy70 2007-09-02T01:50:00+01:00 0 0 p01ml65w 2013-12-13T00:25:00Z 2013-12-13T06:00:00Z 20100 b03ktclt BBC One joins the BBC's rolling news channel for a night of news. audio_video 20100 p01m1rbq 13/12/2013 2013-12-13T00:25:00Z b00h9fxh 2006-04-05T00:20:00+01:00 0 0 p01ml966 2013-12-13T06:00:00Z 2013-12-13T09:15:00Z 11700 b03ktcn1

它还错过了很多孩子。你能告诉我如何处理这个问题吗?

目前的最终目标只是显示节目的标题,最初在树节点/schedule/day/broadcasts/broadcast/programme/display_titles/title中找到,其余的将在完成后显示。

我不会给你答案,因为看起来你并没有试图阅读Nokogiri的文档。

我要做的是为您指明大致方向:

require 'nokogiri'
require 'open-uri'
doc = Nokogiri::XML(open("http://www.bbc.co.uk/bbcone/programmes/schedules/scotland/2013/12/13.xml"))
episode = doc.at('programme[type="episode"]')
episode.at('title').text # => "Skiing Weatherview"
episode.at('short_synopsis').text # => "Detailed weather forecast."
doc.search('broadcast').size # => 32
doc.search('title').map(&:text).uniq.sort
# => ["13/12/2013",
#     "14/12/2013",
#     "A Question of Sport",
...

将解析后的文档作为DOM是不够的。您需要检索所需的节点。可以使用at(查找第一个匹配节点)或search(查找所有匹配节点)来执行此操作。

另请参阅"如何避免在抓取时连接来自节点的所有文本"。

最新更新