Potrzebuję przetwarzać dokumenty XML składające się z bardzo dużej liczby niezależnych rekordów, np.Jak uzyskać Iterator strumieniowy [Węzeł] z dużego dokumentu 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>
W niektórych przypadkach są to po prostu duże pliki, ale w innych mogą pochodzić ze źródła strumieniowego.
Nie mogę po prostu scala.xml.XmlLoader.load(), ponieważ nie chcę przechowywać całego dokumentu w pamięci (lub czekać na zamknięcie strumienia wejściowego), gdy potrzebuję tylko pracować z jeden rekord na raz. Wiem, że mogę użyć XmlEventReader do streamowania danych wejściowych jako sekwencji XmlEvents. Są one jednak znacznie mniej wygodne w pracy niż scala.xml.Node.
Więc chciałbym jakoś wydostać z tego leniwego Iteratora [Węzeł], aby operować na każdym indywidualnym zapisie przy użyciu wygodnej składni Scala, jednocześnie kontrolując wykorzystanie pamięci.
Aby to zrobić samodzielnie, mógłbym zacząć od XmlEventReader, zbudować bufor zdarzeń pomiędzy każdym pasującym tagiem początkowym i końcowym, a następnie skonstruować z niego drzewo węzłów. Ale czy istnieje łatwiejszy sposób, który przeoczyłem? Dzięki za wszelkie spostrzeżenia!
Genialny! Działa to świetnie. Przejście od tego stylu generatora do Iteratora nie jest zbyt trudne; zobacz moją drugą odpowiedź. Dzięki wielkie! –