我遇到了一个问题,无法整理从SEC的edgar数据库返回的格式不正确的XML代码。
由于某种原因,它们的XML代码格式非常糟糕。包含任何字符串的标记都没有关闭,并且实际上可以在其他标记内包含其他XML或HTML文档。通常我会使用Tidy,但是该工具已经停止维护。
我尝试使用Nokogiri::XML::SAX::Parser,但它似乎因为标记没有关闭而出现故障。它似乎能够正常工作,直到它遇到第一个结束标记,然后它就不会再触发任何标记。但它输出的字符是正确的。
class Filing < Nokogiri::XML::SAX::Document
def start_element name, attrs = []
puts "starting: #{name}"
end
def characters str
puts "chars: #{str}"
end
def end_element name
puts "ending: #{name}"
end
end
似乎这将是最佳选项,因为我可以让它忽略其他XML或HTML文档。此外,出于一些文档可能会变得相当大的原因,这将是最有意义的,因为在内存中存储整个DOM可能行不通。
以下是一些示例文件:1 2 3 我开始觉得我只能写自己的定制解析器了。