it-swarm.dev

Nejlepší XML parser pro Java

Potřebuji číst malé soubory (nejvýše několik MB, kódované UTF-8), prohlížet si různé prvky a atributy, možná upravovat několik a znovu zapisovat XML zpět na disk (nejlépe s Nice, odsazené formátování) .

Jaký by byl nejlepší XML parser pro mé potřeby? Existuje mnoho z čeho vybírat. Některé, o kterých vím, jsou:

A samozřejmě ten v JDK (používám Java 6). S Xercesem jsem obeznámen, ale shledávám to neohrabaný.

Doporučení?

380
Evan

Pokud rychlost a paměť není problém, dom4j je opravdu dobrá volba. Pokud potřebujete rychlost, použijte syntaktický analyzátor StAX, jako je Woodstox, je to správná cesta, ale musíte udělat více kódu, abyste udělali věci, a musíte si zvyknout na zpracování XML ve streamech.

80
zehrer

Myslím, že byste neměli zvažovat žádnou konkrétní implementaci syntaktického analyzátoru. Java API pro zpracování XML umožňuje standardní implementaci libovolné implementace syntaktického analyzátoru. Kód by měl být mnohem přenosnější a když si uvědomíte, že určitý syntaktický analyzátor je příliš starý, můžete jej nahradit jiným, aniž byste změnili řádek kódu (pokud to uděláte správně).

V zásadě existují tři způsoby zpracování XML standardním způsobem:

  • SAX Toto je nejjednodušší API. Čtete XML definováním třídy Handler, která přijímá data uvnitř elementů/atributů, když se XML sériově zpracovává. Je to rychlejší a jednodušší, pokud plánujete jen čtení některých atributů/prvků a/nebo zápis některých hodnot zpět (váš případ).
  • DOM Tato metoda vytváří strom objektů, který vám umožňuje náhodně upravovat/přistupovat k němu, takže je lepší pro komplexní manipulaci a manipulaci s XML.
  • StAX Toto je uprostřed cesty mezi SAX a DOM. Stačí napsat kód a vytáhnout data z analyzátoru, o který máte zájem, když je zpracováno.

Zapomeňte na proprietární API, jako jsou JDOM nebo Apache (tj. Apache Xerces XMLSerializer ), protože vás spojí s konkrétní implementací, která se může vyvíjet v čase nebo ztratit zpětnou kompatibilitu, což způsobí změnu kódu v budoucnost, pokud chcete upgradovat na novou verzi JDOM nebo na jakýkoli analyzátor, který používáte. Pokud se budete držet Java standardního API (pomocí továren a rozhraní), bude váš kód mnohem modulárnější a udržovatelnější.

Není třeba říkat, že všechny (nekontrolovala jsem všechny, ale jsem si téměř jistá) navrhovaných analyzátorů jsou v souladu s implementací JAXP, takže technicky můžete všechny používat, bez ohledu na to, které.

250
Fernando Miguélez

Zde je pěkné srovnání DOM, SAX, StAX a TrAX (Zdroj: http://download.Oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2). html )

Funkce StAX SAX DOM TrAX

Typ rozhraní API Vytáhněte, streaming Push, streaming Ve stromu paměti pravidlo XSLT

Snadné použití Vysoká Střední Vysoká Střední

XPath Schopnost Ne Ne Ne Ano Ano

CPU a paměť Dobrá Dobrá Dobrá Liší se

Pouze vpřed Ano Ano Ne Ne

Číst XML Ano Ano Ano Ano

Zápis XML Ano Ne Ano Ano

CRUD Ne Ne Ne Ano Ne

127
Kadir

Jednoduché XML http://simple.sourceforge.net/ je velmi snadné pro (de) serializaci objektů.

8
asdf

Kromě SAX a DOM je k dispozici i analýza STaX pomocí XMLStreamReader, což je xml pull parser.

4
kitsuneymg

Dom4j jsem našel jako nástroj pro práci s XML. Obzvláště ve srovnání s Xerces.

3
Brian Matthews

Nedoporučoval bych to, protože ve své aplikaci máte hodně „přemýšlení“, ale použití XSLT může být lepší (a potenciálně rychlejší s kompilací XSLT do bajtkódu) než manipulace Java.

2
Thomas Barker

Pokud vám záleží na výkonu méně, jsem velkým fanouškem Apache Digester, protože vám v podstatě umožňuje mapovat přímo z XML na Java Beans.

V opačném případě musíte nejprve analyzovat a potom sestavit své objekty.

1
Uri