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

#java #xml #xmlpullparser

#java #xml #xmlpullparser

Вопрос:

Мне нужно использовать pull parser 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 (я тоже анализирую каналы atom) использует реализацию Axiom, которая, похоже, реализует свой Axiom-api, а также geronimo-stax-api_1.0_spec

Комментарии:

1. Использовал XmlPull еще в 2005 году, и это было чертовски быстро, чертовски мало. Отличный инструмент в то время. Пока не могу говорить, потому что он давно не обновлялся. Apache Axiom, похоже, продолжил с того места, где остановился XmlPull. Вы также можете взглянуть на WoodStox .

2. » Эй, я не спрашивал, КАКОЙ тип синтаксического анализатора использовать. Я спрашивал, какую реализацию PULL Parser использовать «. Хорошо, это не было очевидно из первого проекта вашего вопроса.

3. тег xmlpullparser не изменился, и заголовок «какую реализацию pull parser использовать» также не изменился… Итак, я думаю, что это было достаточно очевидно, но я полагаю, что также было довольно легко пропустить это и неправильно истолковать вопрос…

Ответ №1:

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

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

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

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

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

Комментарии:

1. Спасибо StaxMan, кстати, у вас отличный блог. Очень читаемый. Я рад, что подписался на нее.

2. Спасибо, рад, что вам это нравится!

3. Некоторые вспомогательные классы для асинхронного синтаксического анализатора Aalto: github.com/skjolber/async-stax-utils

Ответ №2:

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

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

Комментарии:

1. спасибо, woodstox — лучший вариант для меня, я пропустил это, потому что он имеет org.codehaus.stax2 fqn и использует ярлык wstx, а Google мало что об этом рассказал.

2. Кстати, я действительно не вижу реализации в JRE, если я ищу классы, которые реализуют stax-api, в основном их нет в JRE, а иногда и в com.sun.xml.internal.fastinfoset.stax. * … Но, например, mXparser является частью xmlpull.org а также stax.codehaus.org … однако только реализация codehaus реализует stax-api

3. Он есть. Вы просто вызываете newInstance на фабриках, и это работает.

4. download.oracle.com/javase/6/docs/api/javax/xml/stream /… есть, и вы вызываете createXMLStreamReader.