Какую тянуть парсерную реализацию использовать и когда? - PullRequest
2 голосов
/ 07 октября 2011

Мне нужно использовать синтаксический анализатор XML. Я могу найти stax-api.jar, который, кажется, уже является частью com.sun.xml. * И кажется, что уже реализовано что-то связанное со stax.

com.sun.xml, к сожалению, не имеет источников в JDK 6, поэтому я не могу сказать.

Также есть xmlpull , stax.codehaus.org и apache axiom , которые вроде реализуют stax-api. stax.codehaus.org, похоже, является эталонной реализацией. Xmlpull, похоже, делают те же люди, что и эталонная реализация, а Apache Axiom - это анализатор на основе StAX, созданный для Apache Axis2.

Не могли бы вы уточнить, каковы основные различия, какой API использовать и когда вы будете использовать одну из этих реализаций и почему?

Редактировать : Прежде чем вы решите закрыть этот вопрос, обратите внимание, что выпуски xmlpull.org и stax.codehaus.org устарели (5 лет), и никто не может сказать, реализована ли парсер stax является частью sun.com.xml. *. Мне просто нужен кто-то с опытом работы с парсером, который скажет мне, что использовать и почему.

Например, Проект Apache Abdera (я также разбираю потоки атомов) использует реализацию Axiom, которая, похоже, реализует свой Axiom-api, а также geronimo-stax-api_1.0_spec

Ответы [ 2 ]

3 голосов
/ 15 октября 2011

Помимо указания на то, что JDK / JRE объединяет SJSXP от Sun, который в данный момент работает нормально, я бы рекомендовал ПРОТИВ использовать Stax ref impl (stax.codehaus.org) - НЕ используйте его ни для чего, никогда.В нем много оставшихся ошибок (хотя многие из них были исправлены, первоначальные версии были ужасными), не особенно быстро, не реализует даже все обязательные функции.Держитесь подальше от этого.

Я неравнодушен к Woodstox, который на сегодняшний день является наиболее полной реализацией возможностей XML (наравне с Xerces, о единственном другом синтаксическом анализаторе Java XML, который может это сказать), более производительным, чемSjsxp и все вокруг надежного парсера и генератора - вот почему большинство современных сред и контейнеров веб-служб Java XML включают в себя Woodstox.

Или, если вы хотите сверхвысокой производительности, посмотрите Aalto .Это преемник Woodstox, с меньшим количеством функций (без обработки DTD), но в 2 раза быстрее для многих распространенных случаев.И если вам когда-либо понадобится неблокирующий / асинхронный синтаксический анализ (например, для ввода на основе NIO), Aalto - единственный известный синтаксический анализатор Java XML, который предлагает эту функцию.

Что касается Axiom: это НЕ парсер, ноДревовидная модель построена поверх синтаксического анализатора Stax, как Woodstox, поэтому они не изобретали велосипед.XmlPull предшествует Stax API на пару лет;В основном, стандартизация Stax пришла к людям, использующим XmlPull, которым понравилось то, что они видели, и Sun + BEA, желающим стандартизировать подход.В процессе возникли некоторые трения, поэтому в конце концов, XmlPull не был прекращен, когда Stax был завершен, но можно думать о Stax как о преемнике - XmlPull все еще используется для мобильных устройств;Я думаю, что платформа Android включает его.

(отказ от ответственности: я участвую в проектах Aalto и Woodstox; а также предоставил более десятка исправлений ошибок как для SJSXP, так и для Stax RI)

1 голос
/ 07 октября 2011

Начиная с Java 1.6, внутри простого JRE есть реализация StaX. Вы можете использовать это. Если вам не нравится представление, загляните в woodstox.

Аксиома - это нечто совершенно иное, гораздо более сложное. Xmlpull, похоже, уходит на второй план в пользу той или иной реализации Stax.

...