Najlepszy parser XML dla Javy [zamknięty]
Muszę czytać małe (najwyżej kilka MB, kodowane UTF-8) pliki XML, grzebać wokół patrząc na różne elementy i atrybuty, być może zmodyfikować kilka i zapisać XML z powrotem na dysk (najlepiej z ładnym, wciętym formatowaniem).
Jaki byłby najlepszy parser XML dla moich potrzeb? Jest w czym wybierać. Niektóre, o których wiem są:
I oczywiście ten w JDK (używam Javy 6). Znam Xerces, ale uważam, że jest niezgrabny.
Rekomendacje?
8 answers
Jeśli prędkość i pamięć nie stanowią problemu, dom4j jest naprawdę dobrą opcją. Jeśli potrzebujesz szybkości, użycie parsera StAX, takiego jak Woodstox, jest właściwym sposobem, ale musisz napisać więcej kodu, aby to zrobić i musisz przyzwyczaić się do przetwarzania XML w strumieniach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-24 08:57:33
Myślę, że nie powinieneś brać pod uwagę żadnej konkretnej implementacji parsera. Java API for XML Processing pozwala na użycie dowolnej zgodnej implementacji parsera w standardowy sposób. Kod powinien być znacznie bardziej przenośny, a kiedy zdasz sobie sprawę, że określony parser stał się zbyt stary, możesz go zastąpić innym bez zmiany linii kodu (jeśli zrobisz to poprawnie).
Zasadniczo istnieją trzy sposoby obsługi XML w standardowy sposób:
- SAX to jest najprostsze API. XML można odczytać, definiując klasę obsługi, która odbiera dane wewnątrz elementów / atrybutów, gdy XML jest przetwarzany w sposób szeregowy. Jest to szybsze i prostsze, jeśli planujesz tylko odczytywać niektóre atrybuty / elementy i / lub zapisywać niektóre wartości (Twój przypadek).
- DOM ta metoda tworzy drzewo obiektów, które pozwala modyfikować / uzyskiwać do niego dostęp losowo, więc jest to lepsze dla skomplikowanej manipulacji i obsługi XML.
- StAX to jest w środku ścieżka między SAX i DOM. Po prostu piszesz kod, aby pobrać dane z parsera, który Cię interesuje, gdy są przetwarzane.
Zapomnij o zastrzeżonych API, takich jak JDOM lub Apache (np. Apache Xerces XMLSerializer ), ponieważ będzie wiązać cię z konkretną implementacją, która może ewoluować w czasie lub stracić kompatybilność wsteczną, co sprawi, że zmienisz kod w przyszłości, gdy będziesz chciał uaktualnić do nowej wersji JDOM lub dowolnego używanego parsera. Jeśli trzymasz się Java standard API (używając fabryk i interfejsów) Twój kod będzie znacznie bardziej modułowy i możliwy do utrzymania.
Nie ma potrzeby mówić, że wszystkie (nie sprawdziłem wszystkich, ale jestem prawie pewien) proponowane parsery są zgodne z implementacją JAXP, więc technicznie można użyć wszystkich, bez względu na to, który.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-21 09:21:24
Oto ładne porównanie DOM, SAX, StAX & TrAX (Źródło: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html)
Funkcja StAX SAX DOM TrAX
Typ API Pull, streaming Push,streaming w drzewie pamięci XSLT Rule
Łatwość obsługi wysoka Medium High Medium
Możliwość XPath Nie Nie TAK TAK TAK
Procesor i pamięć dobra Dobra zmienna zmienna
Tylko Do Przodu Tak Tak Nie Nie
Odczyt XML Tak TAK TAK TAK
Zapis XML Tak nie tak tak
CRUD Nie Nie tak nie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-14 15:35:04
Simple XML http://simple.sourceforge.net/ jest bardzo łatwe do serializacji obiektów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-23 19:07:32
Oprócz SAX i DOM istnieje parsowanie STaX dostępne za pomocą xmlstreamreader, który jest parserem XML pull.
Znalazłem dom4j jako narzędzie do pracy z XML. Szczególnie w porównaniu do Xerces.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-24 09:04:57
Nie polecałbym tego, że masz dużo "myślenia" w swojej aplikacji, ale korzystanie z XSLT może być lepsze (i potencjalnie szybsze z kompilacją XSLT-to-bytecode) niż manipulacja Javą.
Jeśli nie zależy ci na wydajności, jestem wielkim fanem Apache Digester, ponieważ zasadniczo pozwala mapować bezpośrednio z XML do Java Beans.
W przeciwnym razie musisz najpierw parsować, a następnie konstruować obiekty.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-18 01:33:36