Мне нужно обработать 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 для потоковой передачи ввода в виде последовательности XmlEvents. Однако работать с ними гораздо менее удобно, чем с scala.xml.Node.
Я хотел бы каким-то образом получить из этого ленивый Iterator [Node], чтобы работать с каждой отдельной записью, используя удобный синтаксис Scala, сохраняя при этом использование памяти под контролем.
Чтобы сделать это сам, я мог бы начать с XmlEventReader, создать буфер событий между каждым совпадающим начальным и конечным тегами, а затем построить на его основе дерево узлов. Но есть ли более простой способ, который я упустил из виду? Спасибо за любые идеи!