2015-03-18 2 views
2

Как получить доступ к текстовому значению вложенного элемента с помощью парсера Nokogiri SAX?Как получить значение элемента XML с помощью анализатора Nokogiri SAX?

require 'nokogiri' 

    xml = <<-eos 
    <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
     <sitemap> 
     <loc>http://www.example.com/example-sitemap.xml</loc> 
    </sitemap> 
    </sitemapindex> 
    eos 

    class MySAXDoc < Nokogiri::XML::SAX::Document 
    def start_element name, attrs=[] 
     if name == "sitemap" 
      # from here, how can one retrieve the value of the child element, `loc`? 
     end 
    end 
    end 

    sax_parser = Nokogiri::XML::SAX::Parser.new(MySAXDoc.new) 
    sax_parser.parse(xml) 
+0

Я тоже застреваю с той же проблемой. У вас есть другой ответ, ожидающий ниже – Aditya1510

ответ

1

Вы не можете читать дальше, чтобы вы сами отслеживали текущий контекст в файле. Что-то вдоль этих линий должны сделать трюк:

def start_element(name, attrs = []) 
    @element = name 

    if name == 'sitemap' 
    @sitemap = true 
    end 
end 

def end_element(name) 
    @element = nil 

    if name == 'sitemap' 
    @sitemap = false 
    end 
end 

def characters(string) 
    if @element == 'loc' && @sitemap 
    # The local variable 'string' holds the text contents of the <loc> tag 
    # so do something with it here 
    puts string 
    end 
end 

Как это работает: Когда запускается новый элемент он проверяет, является ли это и если да устанавливает переменную @sitemap. На следующей итерации, когда элемент он проверяет @sitemap, чтобы увидеть, находится ли он в файле Sitemap и что-то делает с его содержимым.