用Nokogiri元素错误解析SAX?

时间:2012-04-02 09:39:41

标签: ruby nokogiri sax

我有几百个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" => []
}

如何使其有效?

0 个答案:

没有答案