我一直试图找到足够具体的例子来说明如何进行。我正在使用Builder创建xml文件以供导出/导入使用。我从应用程序导出此文件,导入时我想基于此xml文件创建新数据到数据库。模型之间的关系完好无损。
我有几个问题的类别,每个问题有几个答案,可能会触发一个或多个问题。
我制作了xml文件的简化版:https://gist.github.com/1225431
正如我自己做的那样,如果我应该以不同的方式准备xml文件,我也愿意接受建议。
questions = doc.css('questions')
这就是我现在的位置,所以就在开始时。我发现的所有例子都是针对完全不同的问题(或者我觉得)。
我甚至使用合适的工具来完成这份工作吗?任何帮助表示赞赏。
答案 0 :(得分:1)
Nokogiri是Ruby的一个优秀的XML / HTML解析库,所以你肯定使用正确的工具来完成工作。由于您正在解析XML文档,因此您应该使用XPath而不是CSS选择器。幸运的是,Nokogiri has you covered。
Nokogiri文档有一些basic, helpful usage tutorials。 This one回答了你的问题。
以下是特定于您的问题的代码示例。希望这足以让你开始:
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