【发布时间】:2012-01-21 11:29:10
【问题描述】:
我需要处理包含大量独立记录的 XML 文档,例如
<employees>
<employee>
<firstName>Kermit</firstName>
<lastName>Frog</lastName>
<role>Singer</role>
</employee>
<employee>
<firstName>Oscar</firstName>
<lastName>Grouch</lastName>
<role>Garbageman</role>
</employee>
...
</employees>
在某些情况下,这些只是大文件,但在其他情况下,它们可能来自流媒体源。
我不能只使用 scala.xml.XmlLoader.load() 它,因为我不想将整个文档保存在内存中(或等待输入流关闭),而我只需要使用一个一次记录。我知道我可以使用 XmlEventReader 将输入作为 XmlEvent 序列进行流式传输。然而,这些比 scala.xml.Node 更不方便使用。
所以我想以某种方式从中获得一个惰性 Iterator[Node],以便使用方便的 Scala 语法对每个单独的记录进行操作,同时控制内存使用。
为此,我可以从 XmlEventReader 开始,在每个匹配的开始和结束标记之间建立一个事件缓冲区,然后从中构造一个节点树。但是,有没有我忽略的更简单的方法?感谢您提供任何见解!
【问题讨论】:
标签: xml scala xml-parsing