Какую реализацию анализатора запросов использовать и когда?

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

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

Также есть xmlpull, stax.codehaus.org и аксиома Apache, которые как бы реализуют stax-api . stax.codehaus.org кажется эталонной реализацией stax. 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


person lisak    schedule 07.10.2011    source источник
comment
Использовал XMLPull еще в 2005 году, и это было чертовски быстро и чертовски мало. Отличный инструмент в то время. Пока ничего не могу сказать, так как давно не обновлялся. Apache Axiom, похоже, продолжил работу с XMLPull. Вы также можете взглянуть на WoodStox.   -  person Perception    schedule 07.10.2011
comment
Эй, я не спрашивал, КАКОЙ тип синтаксического анализатора использовать. Я спрашивал, какую реализацию PULL Parser использовать. Хорошо, это не было очевидно из первого черновика вашего вопроса.   -  person tolitius    schedule 07.10.2011
comment
тег xmlpullparser не изменился, и заголовок, какую реализацию синтаксического анализатора pull использовать, также не изменился... Так что я думаю, что это было достаточно очевидно, но я полагаю, что также было довольно легко пропустить это и неверно истолковать вопрос. .   -  person lisak    schedule 08.10.2011


Ответы (2)


Помимо указания на то, что 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)

person StaxMan    schedule 15.10.2011
comment
Спасибо StaxMan, кстати, у вас отличный блог. Легко читаемый. Я рад, что подписался на него. - person lisak; 16.10.2011
comment
Спасибо, рад, что вам понравилось! - person StaxMan; 17.10.2011
comment
Некоторые вспомогательные классы для асинхронного парсера Aalto: github.com/skjolber/async-stax-utils - person ThomasRS; 09.02.2017

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

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

person bmargulies    schedule 07.10.2011
comment
спасибо, woodstox - лучший вариант для меня, я пропустил это, потому что у него есть org.codehaus.stax2 fqn и используется ярлык wstx, а google мало что показал об этом. - person lisak; 08.10.2011
comment
Кстати, я действительно не вижу реализации в JRE, если я ищу классы, которые реализуют stax-api, в основном их нет в JRE, а иногда и в com.sun.xml.internal.fastinfoset.stax.* ... Но, например, MXParser является частью xmlpull.org, а также stax.codehaus.org ... хотя только реализация codehaus реализует stax-api - person lisak; 08.10.2011
comment
Это здесь. Вы просто вызываете newInstance на фабриках, и это работает. - person bmargulies; 08.10.2011
comment
download.oracle.com/javase/6/ docs/api/javax/xml/stream/ есть, и вы вызываете createXMLStreamReader. - person bmargulies; 08.10.2011