如何用Ruby和Nokogiri解析USPTO XML文件



这是一整天,我试图找出如何解析USPTO批量XML文件。我试着下载其中一个文件,解压缩,然后运行:

Nokogiri::XML(File.open('ipg140513.xml'))

但它似乎只加载第一个元素,而不是所有的专利(在该文件中有几千个专利)

我做错了什么?

您链接到的文件和其他文件都不是有效的XML,因为它们没有根元素。从维基百科:

每个XML文档只有一个根元素

Nokogiri暗示了这一点,如果你看一下错误(Arup Rakshit建议),如文档中的详细信息:

Nokogiri::XML(File.open("/Users/b/Downloads/ipg140513.xml")).errors # =>
# [
#   #<Nokogiri::XML::SyntaxError: XML declaration allowed only at the start of the document>,
#   #<Nokogiri::XML::SyntaxError: Extra content at the end of the document>
# ]

该文件似乎是一系列有效XML文件的串联,每个文件都有一个<us-patent-grant/>作为其根元素。

幸运的是,Nokogiri可以处理这个无效的XML,如果您处理它作为一个文档片段。试试这个:

Nokogiri::XML::DocumentFragment.parse(File.read('ipg140513.xml')).select{|element| element.name == 'us-patent-grant'}

select选择每个连接文档的根节点,忽略处理指令和DTD声明。

或者,您可以预处理文件并将其分割为其组成的、格式正确的文档。一次性解析一个650MB的文档非常慢,而且占用大量内存。

相关内容

  • 没有找到相关文章

最新更新