Mam następujący problem: Mam bardzo duże pliki XML (np. 300+ Megs) i muszę je przeanalizować, aby dodać niektóre z ich wartości do bazy danych. Struktura tych plików jest również bardzo złożona. Chcę użyć Stax Parser, ponieważ oferuje on ładną możliwość parsowania (i przetwarzania w ten sposób) tylko części pliku XML naraz, a więc nie wczytywania całej zawartości do pamięci, ale z drugiej strony uzyskiwania wartości za pomocą Stax (przynajmniej na tych plikach XML) jest kłopotliwy, muszę napisać tonę kodu. Z tego ostatniego punktu widzenia niezmiernie mi pomoże, gdybym mógł ustawić plik XML na obiektach Javy (jak robi to JAX-B), jednak to ładowałoby cały plik plus tony instancji Object w pamięci naraz.Parsowanie bardzo dużych plików XML i rozesłanie do obiektów Java
Moje pytanie brzmi, czy istnieje sposób, aby wykonać ciągły proces (lub po prostu częściowo przeanalizować) plik sekwencyjnie, a następnie przesłać tylko te części do obiektów Java, aby móc sobie z nimi poradzić bez zbędnego obciążania pamięci?
Dobrze wiedzieć, że twój problem został rozwiązany. Zastanawiasz się, jak to jest (soln w tym poście) inne od tego, co napisałem? – Kashyap
Cóż, szczerze mówiąc, był to strach przed dużymi strukturami, część leniwości :) (obie są złe i godne ubolewania). Po pierwsze, z dokumentacji EMF wydaje się być dość zaangażowaną strukturą, nie tylko dla przetwarzania XML, ale dla mnóstwa innych rzeczy i zawsze staram się unikać tak ciężkich frameworków, kiedy tylko jest to możliwe (to tylko osobiste preferencje, nie jestem powiedzenie jest złe, aby to zrobić w ogóle). Po drugie, jestem leniwy, a EMF używa niestandardowych API parsowania XML, o których nie wiem, dlatego też preferowałem rozwiązanie ze standardowymi API Java XML. –
Rzeczywiście, bez względu na to, czy podoba Ci się EMF, czy nie, zaleciłem NIE używać go ("** ponieważ EMF jest zbyt dużym młotkiem dla tak małego problemu. **"), chyba że nie masz wyboru. I o parserze, aby zacytować ponownie "tak ** po prostu parsuj używając czegokolwiek chcesz **, stwórz trochę StringStream lub coś dla każdego w pętli i ** przejdź do JAX-B lub EMF. **" –
Kashyap