我有几百个XML文件,如下所示。我想使用SAX解析它们并在所有标记之间保存内容并将它们保存在哈希中。
这是XML文件的片段:
<titles>
<title xml:lang="sv">Arkivvetenskap</title>
<title xml:lang="en">Archival science</title>
</titles>
<descriptions>
<ct:description xml:lang="sv">
<ct:text>Arkivvetenskap rör villkoren för befintliga arkiv och modern arkivbildning med
fokus på arkivarieyrkets arbetsuppgifter: bevara, tillgängliggöra och styra information.
Under ett år behandlas bl a informations- och dokumenthantering, arkivredovisning,
gallring, lagstiftning och arkivteori. I kursen ingår praktik, där man under handledning
får arbeta med olika arkivarieuppgifter.
</ct:text>
</ct:description>
</descriptions>
</educationInfo>
完整的XML如下所示:https://gist.github.com/2282103
我有以下代码:
require 'rubygems'
require 'nokogiri'
require 'ap'
include Nokogiri
class Fish < Nokogiri::XML::SAX::Document
def initialize
@f = {}
@f["titles"] = Array.new([])
@f["descriptions"] = Array.new([])
@desc = {}
end
def start_element(element, attributes = [])
@element = element
@desc = {} if element == "ct:description xml:lang='sv'"
end
def end_element(element, attributes = [])
@f["titles"] << @characters if element == "title xml:lang='sv'"
@f["titles"] << @characters if element == "title xml:lang='en'"
if element == "ct:text"
@desc["edutext"] = @characters
@f["descriptions"] << @desc
end
end
def characters(string)
@characters = string
end
def end_document
ap @f
puts "Finished..."
end
end
#Create a parser
parser = Nokogiri::XML::SAX::Parser.new(Fish.new)
# Feed the parser some XML
parser.parse(File.open("arkivvetenskap.xml", 'rb'))
我想要存储的XML文件中的元素不存储在哈希中。我想在每个元素中存储每个内容。
我得到的输出是:
{
"descriptions" => [
[0] {
"edutext" => "tik, där man under handledning får arbeta med olika arkivarieuppgifter."
}
],
"titles" => []
}
如何使其有效?