parsowanie xml

0

jaki jest najszybszy sposób parsowania pliku xml o wielkości ok 50 kB? Ktoś kiedyś się spotkał z testami wydolnościowymi bibliotek?

0

gdzieś na stacku. odpowiedź brzmi to zależy
"In summary, we can conclude that choosing from the two approaches studied for processing XML documents depends mostly on project’s requirements."
http://sdiwc.net/digital-library/download.php?id=00000582.pdf (tylko to zdanie przeczytałem ;p)
także jak nie masz jakichś specyficznych wymagań projetowych to przy plikach 50kB raczej nie ma znaczenia.

Ogólnie jak się pytali co wybrać to mówiłem, że jak duży plik to SAX a jak mniejszy to DOM (ale chodziło o zajęcie pamięci podczas przetważanie)

0

w tych wszystkich odpowiedziach co widziałem, zawsze był tworzony obiekt dla konkretnego xml. Czy jest jakiś bardziej generyczny sposób, żeby parsować plik bez tworzenia dla niego obiektu?

1

Napisałem najpierw odpowiedź z głowy, ale potem poszukałem. I okazuje się, że - jak zwykle - to zależy :)

Przy tak postawionym pytaniu, o prędkość parsowania, to SAX bije DOM na głowę.

Pełne pomiary: A Comparative Study and Benchmarking on
XML Parsers
, by Su Cheng Haw, G. S. V. Radha Krishna Rao.

Ale pytanie nie jest raczej dobrze postawione. Bo oprócz parsowania coś chcesz z tymi danymi zrobić. A w zależności od selection rate wyniki mocno się zmieniają. I tak przy selection rate 25% (czytasz i przetwarzasz tylko 25% danych, resztę przeskakujesz), oba narzędzia mają podobną wydajność (throughput), dla małych plików. No a przy selection rate 100%, DOM jest szybszy 5-krotnie! Zaskakujące jak dla mnie.

Uważać trzeba na rozmiar pliku. W którymś momencie SAX pokona DOM niezależnie od selection rate. Bo czas przetwarzania SAX-em jest zawsze proporcjonalny do rozmiaru pliku, a przy DOM-ie rośnie szybciej (kwadratowo?). No chyba że robimy coś niedobrego z tym dużym plikiem, np. zbieramy wszystko w pamięci robiąc to samo co DOM.

Przykład parsowania stremowego: Parsing XML with SAX.

Co zatem robić? Jedyny sposób zrealizować oba sposoby i zmierzyć. Ja bym robił w ciemno SAX-em, właściwie zawsze. Nawet myślałem, że pytanie jest banalne, no-brainer. A tu się okazuje, że można w ten sposób wtopić, przetwarzać 50 kB przez 5 sekund zamiast 1 sekundy. Chyba że kolesie pomylili się w pomiarach. Albo ja w interpretacji :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.