试图解析可能非常深嵌套的xml文件与Nokogiri



我一直在试图找到关于如何进行的足够具体的例子。我正在创建用于导出/导入使用的生成器xml文件。我从应用程序导出这个文件,当导入我要创建新的记录,基于此xml文件的数据库。模型之间的关系完整

我有一个有几个问题的类别,每个问题有几个答案,这些答案可能会引发一个或多个进一步的问题。

我做了简化版本的xml文件:https://gist.github.com/1225431

当我自己做这件事时,我也愿意听取建议,如果我应该以不同的方式准备xml文件。

questions = doc.css('questions')

这是我现在的位置,所以在开始的地方。我找到的所有例子都是针对完全不同类型的问题(至少我觉得是这样)。

我用的工具对吗?

Nokogiri是一个很棒的Ruby XML/HTML解析库,所以您肯定是在使用正确的工具。因为要解析XML文档,所以应该使用XPath而不是CSS选择器。幸运的是,Nokogiri已经覆盖了你。

Nokogiri文档有一些基本的、有用的使用教程。

以下是针对您的问题的代码示例。希望这足以让你开始:

require 'nokogiri'
# Reads the `example.xml` file from the current directory.
file    = File.read("example.xml")
# Uses Nokogiri::XML to parse the file.
doc     = Nokogiri::XML(file)
# Iterate over each <question> element and print 
# the text inside the first <name> element of each.
doc.xpath("//question").each do |q|
    puts q.at("name").text
    # Iterate over each <selection> element within the
    # current question and print its <name> and <conditional> 
    # line "name: conditional"
    q.xpath("./selection").each do |selection|
        puts "#{selection.at("name").text}: #{selection.at("conditional").text}"
    end
    # Same as above, but use variables.
    q.xpath("./selection").each do |selection|
        name                = selection.at("name").text
        conditional = selection.at("conditional").text
        puts "#{name}: #{conditional}"
    end
end

相关内容

  • 没有找到相关文章

最新更新