Muszę czytać małe pliki XML (co najwyżej kilka MB, zakodowane w UTF-8), szperać w poszukiwaniu różnych elementów i atrybutów, być może zmodyfikować kilka i ponownie zapisać XML na dysku (najlepiej z ładnym, wciętym formatowaniem) .
Jaki byłby najlepszy parser XML dla moich potrzeb? Jest wiele do wyboru. Niektóre są mi znane:
I oczywiście ten w JDK (używam Java 6). Znam Xerces, ale uważam, że jest niezgrabny.
Rekomendacje?
Odpowiedzi:
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 załatwić sprawę i musisz przyzwyczaić się do przetwarzania XML w strumieniach.
źródło
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 gdy zdasz sobie sprawę, że określony parser się zestarzał, możesz go zastąpić innym bez zmiany wiersza kodu (jeśli zrobisz to poprawnie).
Zasadniczo istnieją trzy sposoby standardowego przetwarzania XML:
Zapomnij o zastrzeżonych interfejsach API, takich jak JDOM lub Apache (tj. Apache Xerces XMLSerializer ), ponieważ spowoduje to powiązanie z konkretną implementacją, która może ewoluować w czasie lub utracić kompatybilność wsteczną, co spowoduje zmianę kodu w przyszłości, gdy będziesz chciał uaktualnić do nowa wersja JDOM lub dowolnego innego parsera, którego używasz. Jeśli będziesz trzymać się standardowego interfejsu API Java (używając fabryk i interfejsów), twój kod będzie znacznie bardziej modułowy i łatwiejszy w utrzymaniu.
Nie trzeba mówić, że wszystkie (nie sprawdziłem wszystkich, ale jestem prawie pewien) proponowanych parserów są zgodne z implementacją JAXP, więc technicznie możesz używać wszystkich, bez względu na to, które.
źródło
Oto ładne porównanie dla DOM, SAX, StAX i TrAX (źródło: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )
Typ interfejsu API Pull, streaming Push, streaming In memory tree Reguła XSLT
Łatwość użycia Wysoka Średnia Wysoka Średnia
Możliwość XPath Nie Nie Tak Tak
Procesor i pamięć Dobry Dobry Różni się Różni się
Tylko do przodu Tak Tak Nie Nie
Czytaj XML Tak Tak Tak Tak
Napisz XML Tak Nie Tak Tak
CRUD Nie Nie Tak Nie
źródło
Proste XML http://simple.sourceforge.net/ jest bardzo łatwe do (od) serializacji obiektów.
źródło
Oprócz SAX i DOM dostępne jest parsowanie STaX za pomocą XMLStreamReader, który jest parserem ściągania xml.
źródło
Odkryłem, że dom4j jest narzędziem do pracy z XML. Szczególnie w porównaniu do Xerces.
źródło
Nie polecałbym tego, ponieważ masz dużo „myślenia” w swojej aplikacji, ale używanie XSLT może być lepsze (i potencjalnie szybsze dzięki kompilacji XSLT do kodu bajtowego) niż manipulacja Java.
źródło
Jeśli mniej zależy ci na wydajności, jestem wielkim fanem Apache Digester, ponieważ zasadniczo pozwala ona mapować bezpośrednio z XML na Java Beans.
W przeciwnym razie musisz najpierw przeanalizować, a następnie skonstruować swoje obiekty.
źródło