如何使用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 :(得分:2)
您无法提前阅读,因此您必须自己跟踪文件中的当前上下文。沿着这些方向的东西可以解决这个问题:
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
如何工作:当一个新元素启动时,它会检查它是否为a,如果是,则设置一个@sitemap变量。在元素的下一次迭代中,它检查@sitemap以查看它是否在站点地图中并对其内容执行某些操作。