Nokogiri SAX解析器如何中断?

4
我正在使用 Nokogiri SAX 解析器在 XML 文档中查找特定的片段,但完成后就没有继续扫描文档的必要了。
有没有一种方法可以立即终止解析?
1个回答

3

通过查看Nokogiri的源代码,我不认为这是可能的。

Nokogiri在某个时候——响应于一些Ruby方法或返回值——需要调用libxml2中的xmlStopParser()。因为:

  1. 我在源代码中没有找到这个函数(包括xml_sax_parser.c的源代码),以及
  2. 当搜索"Nokogiri" "xmlStopParser"时,我没有发现任何相关信息。

我得出结论,Nokogiri目前没有停止解析的方法。


4
你能否通过例外处理来应付它?这样做是相当卑劣的,滥用了例外处理系统,我甚至只是考虑这种做法就需要进行某种赎罪。 - mu is too short
2
@muistooshort,你这个可怕的人。虽然点赞你的想法,但我还是有点担心它可能会让libxml2 SAX解析器的一些内存泄漏出来,因为它可能永远无法“确保”清理干净。 - Phrogz
它确实能够工作,但我太羞于将其作为答案发布。 - mu is too short
感谢Phrogz的调查!我想我会让它解析整个文档,并在此过程中进行更多的检查。@muistooshort--事实上,我也考虑过这样做xD。 - Karl
1
延伸异常处理的想法,使用 throw :obscured_symbol_919155catch :obscured_symbol_919155 或许会更加妥善。 (或使用 Object.new 创建一个唯一标识符) - kizzx2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接