У меня есть пара сотен файлов 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" => []
}
Как это работает?