2016-07-29 51 views
-1

我使用引入nokogiri使用SAX解析XML文件:引入nokogiri SAX解析器返回數組

@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 

不幸的是,返回數組是零(我想提供一個簡單的字符串,相同的結果)。提供返回值有問題嗎?我如何與解析器進行交流?

+2

請發佈您的數組轉換代碼...和xml示例... –

+0

請閱讀「[mcve]」。我們需要最低限度的程序和證明問題本身的最小數據。我們還需要知道您的預期產出。 –

回答

0

解決方案:需要以不同方式構建呼叫。如果我想要一個id數組,我可以通過文檔屬性訪問它(必須解碼並編碼爲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"]