Есть ли способ построить цепочку фильтров StAX?

Выполнение пользовательских преобразований для различных типов событий с помощью StAX с использованием EventFilter и StreamFilter Я чувствую, что меня принуждают к процедурной реализации - извлечь эти события и обработать их, отфильтровать эти события и обработать их, а затем собрать все результаты вместе. и возврат.

SAX, кажется, имеет действительно хорошую функцию - цепные фильтры на основе XMLFilters.
Я бы предпочел, чтобы моя реализация была основана на StAX, но каким-то образом включала или эмулировала цепные фильтры из SAX.

Можно ли это сделать с разумными усилиями и как? Есть ли уже реализация, которую я пропустил?

Из-за ограничений проекта я должен придерживаться JDK, поэтому, пожалуйста, не предлагайте использовать другую библиотеку в качестве ответа, но не стесняйтесь предлагать ее в комментариях. - Я хотел бы знать, что там.


person kostja    schedule 06.04.2011    source источник
comment
Я больше не работаю над проектом, но тогда я обнаружил vtd-xml и выступал за его принятие. Однако технический руководитель настаивал на минимальном стеке, состоящем только из JDK, поэтому, к сожалению, нам не удалось много поиграть с vtd.   -  person kostja    schedule 04.09.2016


Ответы (2)


Взгляните на EventReaderDelegate. и StreamReaderDelegate. Эти классы позволят вам обернуть родительское событие или средство чтения потока, чтобы вы могли вставить любую логику, которую хотите.

person kschneid    schedule 06.04.2011

Хотя вы можете использовать делегатов, я думаю, что одна из очень немногих областей, в которых SAX имеет преимущество перед Stax, — это способность создавать эффективные модульные конвейеры. Stax более оптимален для подходов с рекурсивным спуском, а также для частичной привязки данных (может проходить через поток, передавать фрагменты в JAXB, продолжать, очень просто, мощно).

person StaxMan    schedule 30.06.2011
comment
Re может пересекать поток; передавайте куски в JAXB, продолжайте... есть ли хорошие примеры этого где-то, кроме jar-файла Metro? - person Ed Staub; 23.07.2011
comment
Хотелось бы, чтобы у меня были ссылки (я сделал xml-презентацию с фрагментами, но, увы, не общедоступную). Но основная идея довольно проста; создайте XMLStreamReader, просмотрите его, передайте JAXB Unmarshaller для привязки (убедитесь, что он указывает на START_ELEMENT; после привязки будет превышено соответствие END_ELEMENT). - person StaxMan; 25.07.2011