提问人:Vlad Zloteanu 提问时间:5/6/2010 更新时间:8/12/2010 访问量:1770
带有自关闭标记的 Nokogiri 拉取解析器 (Nokogiri::XML::Reader) 问题
Nokogiri pull parser (Nokogiri::XML::Reader) issue with self closing tag
问:
我有一个巨大的XML(>400MB)包含产品。因此,使用 DOM 解析器被排除在外,所以我尝试使用拉取解析器来解析和处理它。下面是我遍历产品列表的方法的片段。each_product(&block)
基本上,使用堆栈,我将每个节点转换为哈希值并对其进行处理。<product> ... </product>
while (reader.read)
case reader.node_type
#start element
when Nokogiri::XML::Node::ELEMENT_NODE
elem_name = reader.name.to_s
stack.push([elem_name, {}])
#text element
when Nokogiri::XML::Node::TEXT_NODE, Nokogiri::XML::Node::CDATA_SECTION_NODE
stack.last[1] = reader.value
#end element
when Nokogiri::XML::Node::ELEMENT_DECL
return if stack.empty?
elem = stack.pop
parent = stack.last
if parent.nil?
yield(elem[1])
elem = nil
next
end
key = elem[0]
parent_childs = parent[1]
# ...
parent_childs[key] = elem[1]
end
问题出在自闭标签(EG)上,因为我无法区分“正常”和“自闭”标签。它们都是类型的,我无法在文档中找到任何其他鉴别器。<country/>
Nokogiri::XML::Node::ELEMENT_NODE
关于如何解决这个问题的任何想法?
答:
评论