Przeszukuję bibliotekę java pod kątem parsowania XML (złożona konfiguracja i pliki danych), trochę googlowałem, ale nie znalazłem innego niż dom4j (wygląda na to, że pracują na V2). Przyjrzałem się konfiguracji wspólnej, ale nie Nie podoba mi się, inne projekty Apache w XML wydają się być w stanie hibernacji. Nie oceniałem samodzielnie domeny dom4j, ale chciałem tylko wiedzieć - Czy Java ma inne (dobre) biblioteki parsujące XML typu open source? a jakie masz doświadczenia z dom4j?
Po odpowiedzi @ Voo pozwól mi zapytać jeszcze jedno - czy powinienem używać wbudowanych klas Java, czy dowolnej biblioteki innej firmy, takiej jak dom4j .. Jakie są zalety?
Odpowiedzi:
W rzeczywistości Java obsługuje 4 metody analizowania XML po wyjęciu z pudełka:
Parser / Builder DOM: Cała struktura XML jest ładowana do pamięci i możesz używać dobrze znanych metod DOM do pracy z nią. DOM umożliwia również pisanie w dokumencie z przekształceniami Xslt. Przykład:
SAX Parser: wyłącznie do odczytu dokumentu XML. Parser Saxa przegląda dokument i wywołuje metody wywołania zwrotnego użytkownika. Istnieją metody na początek / koniec dokumentu, elementu i tak dalej. Są zdefiniowane w org.xml.sax.ContentHandler i istnieje pusta klasa pomocnicza DefaultHandler.
StAx Reader / Writer: Działa z interfejsem zorientowanym na strumień danych. Program prosi o następny element, gdy jest gotowy, tak jak kursor / iterator. Możesz także tworzyć za jego pomocą dokumenty. Przeczytaj dokument:
Napisz dokument:
JAXB: Najnowsza implementacja do odczytu dokumentów XML: Jest częścią Java 6 w wersji 2. To pozwala nam serializować obiekty Java z dokumentu. Czytasz dokument z klasą, która implementuje interfejs do javax.xml.bind.Unmarshaller (klasę do tego dostajesz z JAXBContext.newInstance). Kontekst musi zostać zainicjowany przy użyciu używanych klas, ale wystarczy określić klasy główne i nie trzeba martwić się o klasy statyczne, do których istnieją odwołania. Używasz adnotacji, aby określić, które klasy powinny być elementami (@XmlRootElement), a które pola są elementami (@XmlElement) lub atrybutami (@XmlAttribute, co za niespodzianka!)
Napisz dokument:
Przykłady bezwstydnie skopiowane ze starych slajdów z wykładów ;-)
Edycja: informacje o tym, „którego interfejsu API mam użyć?”. Cóż, to zależy - nie wszystkie API mają takie same możliwości, jak widzisz, ale jeśli masz kontrolę nad klasami używanymi do mapowania dokumentu XML, JAXB jest moim ulubionym, naprawdę eleganckim i prostym rozwiązaniem (chociaż nie używałem go do naprawdę duże dokumenty, może się trochę skomplikować). SAX jest również dość łatwy w użyciu i po prostu trzymaj się z dala od DOM, jeśli nie masz naprawdę dobrego powodu, aby go używać - moim zdaniem stary, niezgrabny interfejs API. Nie sądzę, aby istniały żadne nowoczesne biblioteki innych firm, które zawierają coś szczególnie przydatnego, czego brakuje w STL, a standardowe biblioteki mają zwykłe zalety, ponieważ są wyjątkowo dobrze przetestowane, udokumentowane i stabilne.
źródło
Java obsługuje dwie metody analizowania XML po wyjęciu z pudełka.
SAXParser
Możesz użyć tego parsera, jeśli chcesz analizować duże pliki XML i / lub nie chcesz zużywać dużo pamięci.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html
Przykład: http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
DOMParser
Możesz użyć tego parsera, jeśli potrzebujesz wykonywać zapytania XPath lub musisz mieć dostępny cały DOM.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/DocumentBuilderFactory.html
Przykład: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
źródło
Jeśli potrzebujesz API podobnego do DOM - to znaczy takiego, w którym parser XML przekształca dokument w drzewo węzłów elementów i atrybutów - masz co najmniej cztery do wyboru: sam DOM, JDOM, DOM4J i XOM. Jedynym możliwym powodem używania DOM jest to, że jest on postrzegany jako standard i jest dostarczany w JDK: pod wszystkimi innymi względami wszystkie inne są lepsze. Moje własne preferencje, ze względu na połączenie prostoty, mocy i wydajności, to XOM.
Oczywiście są też inne style przetwarzania: niskopoziomowe interfejsy parsera (SAX i StAX), interfejsy wiązania obiektów danych (JAXB) i języki deklaratywne wysokiego poziomu (XSLT, XQuery, XPath). To, co jest dla Ciebie najlepsze, zależy od wymagań projektu i osobistego gustu.
źródło
Argument Nikity jest doskonały: nie myl dojrzałości ze złem. XML niewiele się zmienił.
JDOM byłby kolejną alternatywą dla DOM4J.
źródło
Nie potrzebujesz zewnętrznej biblioteki do analizowania XML w Javie. Java od wieków zawiera wbudowane implementacje SAX i DOM.
źródło
Dla osób zainteresowanych korzystaniem z JDOM, ale obawiających się, że nie było aktualizowane od jakiegoś czasu (zwłaszcza nie wykorzystujących generycznych Java), istnieje fork o nazwie CoffeeDOM, który dokładnie rozwiązuje te aspekty i modernizuje JDOM API, przeczytaj więcej tutaj:
http://cdmckay.org/blog/2011/05/20/introducing-coffeedom-a-jdom-fork-for-java-5/
i pobierz go ze strony projektu pod adresem:
https://github.com/cdmckay/coffeedom
źródło
VTD-XML to wysokowydajna biblioteka analizująca XML ... jest lepsza od innych praktycznie pod każdym względem ... oto artykuł z 2013 roku, który analizuje wszystkie struktury przetwarzania XML dostępne na platformie java ...
http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf
źródło