open-uri和sax解析一个巨大的xml文档

我需要连接到外部XML文件进行下载和处理(300MB +)。 然后运行XML文档并将元素保存在数据库中。

我已经在使用Saxerator的生产服务器上做这个没有问题,对内存温和。 它很棒。 这是我的问题 –

我需要使用open-uri(尽管可能有替代解决方案?)来抓取文件进行解析。 这个问题是open-uri必须在任何开始解析之前加载整个文件,这违背了使用SAX Parser节省内存的所有目的……任何解决方法? 我可以从外部XML文档中读取吗? 我无法加载整个文件或它崩溃我的服务器,因为文档每30分钟更新一次,我不能只在我的服务器上保存它的副本(虽然这是我目前正在做的事情,以确保一切工作正常)。

我正在做这个Ruby,ps

您可能想尝试使用Net :: HTTP的流式界面而不是open-URI。 这将给Saxerator(通过底层的Nokogiri :: SAX :: Parser)一个IO对象而不是整个文件。

我花了几分钟写了这篇文章然后意识到你用ruby标记了这个问题。 我的解决方案是Java,所以我为此道歉。 我仍然把它包括在这里,因为它可能对你或后来的有用。

这总是我处理大型外部xml文件的方式

XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); xmlReader.setFeature("http://xml.org/sax/features/namespaces", true); XMLFilter filter = new XMLFilterImpl(); filter.setParent(xmlReader); filter.parse(new InputSource(new BufferedReader(new InputStreamReader(new URL("").openConnection().getInputStream(),"UTF8"))));