如何使用Nokogiri SAX Parser检索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)

您不能提前阅读,因此您必须自己跟踪文件中的当前上下文。沿着这些路线的东西应该能起到作用:

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中,并对其内容进行了处理。

最新更新