Nokogiri Sax Parser返回阵列

时间:2016-07-29 11:56:13

标签: ruby-on-rails ruby parsing nokogiri sax

我正在使用Nokogiri和Sax来解析xml文件:

@active_ids = Nokogiri::XML::SAX::Parser.new(IdParser.new).parse(open("https://s3.eu-central-1.amazonaws.com/redacted/client_xml.xml"))

在解析器中,我正在构建一个id数组,并希望在解析器完成后返回它们:

def initialize
  @array_of_ids = []
end
def start_element(name, attrs = [])
  @array_of_ids << attrs[0][1].to_s if name == "job"
end      
def end_document
  return @array_of_ids
end

不幸的是,返回的数组是nil(我尝试提供一个简单的字符串,结果相同)。提供返回值是否有问题?我如何与解析器通信?

1 个答案:

答案 0 :(得分:0)

解决方案:需要以不同方式构建呼叫。如果我想要一个id数组,那么我可以通过document属性访问它(必须解码并编码为json以便很好地处理它,因为我不理解解析器提供的格式):

  f = open("https://s3.eu-central-1.amazonaws.com/xml.xml")
  id_parser = Nokogiri::XML::SAX::Parser.new(IdParser.new)
  id_parser.parse(f)
  @active_ids = ActiveSupport::JSON.decode(id_parser.to_json)["document"]["array_of_ids"]