Muszę wyodrębnić kilka zawartości pola z dużego pliku XML. Obecnie robię to przez połączenie xmlstarlet i skryptu Python (używając ElementTree). Chodziło o to, aby przyciąć plik XML z bezużytecznych danych za pomocą xmlstarlet, a następnie przetworzyć mniejszy plik za pomocą Pythona (użycie Pythona bezpośrednio na pliku nie było wykonalne - pamięć i procesor były zapchane, a niektóre pliki nigdy nie zostały przetworzone). Zasadniczo działa, ale:
- to nie jest wydajne
- nie jest szczególnie elastyczny
- jest to dość brzydkie (najmniej z moich obaw, ale jednak z punktu widzenia utrzymania)
Szukam porady, jak najlepiej poradzić sobie z takim przypadkiem (ilość wyodrębnionych danych wynosi około 5% początkowego pliku). Jestem otwarty na wszystko rozsądne (konkretny język, może zrzucenie pliku XML do DB, a następnie wyodrębnienie tego, czego potrzebuję przed zrzuceniem DB ?, ...)
Odpowiedzi:
Czy korzystasz z ElementTree
iterparse
? Powinien być w stanie efektywnie obsługiwać duże dane wejściowe bez parsowania całego drzewa w pamięci (co zwykle ma miejsce, gdy koła wypadają z parsera XML).Możesz znaleźć wiele przypadków użycia i przykładów na stackoverflow.
źródło