Gdzie mogę znaleźć szczegółowe porównanie frameworków Java XML?
Próbuję wybrać framework do przetwarzania XML dla moich projektów Java i gubię się w nazwach.. XOM, JDOM itp. Gdzie mogę znaleźć szczegółowe porównanie wszystkich popularnych frameworków Java XML?
2 answers
Jak zauważył Blaise, trzymaj się standardów. Ale istnieje wiele standardów stworzonych w tym okresie, aby rozwiązać różne problemy/przypadki użycia. Który z nich wybrać całkowicie zależy od twoich wymagań. Mam nadzieję, że poniższe porównanie pomoże Ci wybrać odpowiedni.
Teraz są dwie rzeczy musisz wybrać. API i implementacje API (jest ich wiele)
API
SAX: Pros
- Zdarzenie na podstawie
- wydajna pamięć
- faster than DOM
- obsługuje walidację schematu
SAX: Cons
- brak modelu obiektowego, musisz wejść w wydarzenia i stwórz siebie
- pojedynczy parse xml i może tylko idź do przodu
- tylko do odczytu api
- brak obsługi xpath
- trochę trudniejsze w użyciu
DOM: plusy
- in-memory object model
- zachowuje element zamówienie
- dwukierunkowe
- odczyt i zapis api
- manipulacja xml
- prosty w użyciu
- obsługuje walidację schematu
DOM: Cons
- pamięć dla większych dokumentów XML (zwykle używane w dokumentach XML mniej niż 10 mb)
- wolniej
- model generyczny, czyli pracujesz z węzłami
Stax: Plusy
- Best of SAX and DOM czyli łatwość DOM i skuteczność SAX
- wydajna pamięć
- Model Pull
- odczyt i zapis api
- obsługuje podczęści
- może odczytywać wiele dokumentów w tym samym czasie w jednym wątku
- równoległe przetwarzanie XML jest łatwiejsze
Stax: Cons
- brak wsparcia walidacji schematu (o ile z tego co pamiętam, Nie wiem czy mają Dodano Teraz)
- can only go forward like sax
- brak manipulacji xml
JAXB: Plusy
- pozwala na dostęp i przetwarzanie XML dane bez konieczności znajomości XML
- dwukierunkowe
- wydajniejsza pamięć niż DOM
- SAX i DOM są parserami generycznymi, gdzie jak JAXB tworzy parser specyficzny dla Twój XML Schmea
- konwersja danych: JAXB może konwertować xml do typów Javy
- obsługuje manipulację XML poprzez obiekt API
JAXB: Cons
- can only parse valid XML
Trax: do przekształcania XML z 1 formularza do innej formy za pomocą XSLT
Implementacje
SAX, DOM, Stax, JAXB to tylko specyfikacje. Istnieje wiele open source i komercyjnych implementacji tych specyfikacji . Przez większość czasu możesz po prostu trzymać się tego, co pochodzi z JDK lub serwera aplikacji. Ale czasami trzeba użyć innej implementacji, która jest domyślnie dostarczana. I Tu możesz docenić JAXP wrapper api . JAXP pozwala na przełączanie implementacji poprzez konfigurację bez konieczności modyfikowania kodu. Zapewnia również niezależne od parsera/specyfikacji api do analizowania, transformacji, walidacji i zapytań dokumentów XML.
Wydajność i inne porównania różnych implementacji
- Stax: http://java.sun.com/performance/reference/whitepapers/StAX-1_0.pdf
- Większość API: http://www.ibm.com/developerworks/xml/library/x-databdopt2 /
- JAXB vs xmlbeans dyskusja na temat SO: JAXB vs Apache XMLBeans
- http://www.ibm.com/developerworks/xml/library/x-injava/
Teraz standardy są dobre, ale raz na jakiś czas napotykasz ten szalony usecase, gdzie musisz obsługiwać parsowanie dokumentu XML, który jest 100 gigabajtów o rozmiarze lub potrzebujesz ultra szybkiego przetwarzania XML (może być twój są implementacji XML Parser chip) i to jest, gdy trzeba zrzucić standardy i szukać innego sposobu robienia rzeczy. Chodzi o użycie odpowiedniego narzędzia do właściwej pracy! I tu proponuję rzucić okiem navtd-xml
W początkowych dniach SAX i DOM, ludzie chcieli prostszego API niż przez którekolwiek z nich. JDOM, dom4j, XmlBeans, JiBX, Castor są tymi, których wiem, że stał się popularny.
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
2017-05-23 12:10:39
@Pangea
JAXB nie jest bezpośrednio porównywalny do DOM i SAX. Java DOM i SAX analizowanie interfejsów API to interfejsy API niższego poziomu służące do analizowania dokumentów XML, podczas gdy JAXB (Java API for XML Binding) jest API wyższego poziomu do konwersji XML elementy i atrybuty hierarchii obiektów Java (i odwrotnie). Implementacje JAXB będą najprawdopodobniej używać parsera DOM lub SAX za kulisami, aby wykonać rzeczywiste parsowanie wejścia XML data.
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
2017-05-23 12:18:09