Выполнение пользовательских преобразований для различных типов событий с помощью StAX с использованием EventFilter
и StreamFilter
Я чувствую, что меня принуждают к процедурной реализации - извлечь эти события и обработать их, отфильтровать эти события и обработать их, а затем собрать все результаты вместе. и возврат.
SAX, кажется, имеет действительно хорошую функцию - цепные фильтры на основе XMLFilters.
Я бы предпочел, чтобы моя реализация была основана на StAX, но каким-то образом включала или эмулировала цепные фильтры из SAX.
Можно ли это сделать с разумными усилиями и как? Есть ли уже реализация, которую я пропустил?
Из-за ограничений проекта я должен придерживаться JDK, поэтому, пожалуйста, не предлагайте использовать другую библиотеку в качестве ответа, но не стесняйтесь предлагать ее в комментариях. - Я хотел бы знать, что там.
Есть ли способ построить цепочку фильтров StAX?
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
Re может пересекать поток; передавайте куски в JAXB, продолжайте... есть ли хорошие примеры этого где-то, кроме jar-файла Metro?
- person Ed Staub; 23.07.2011
Хотелось бы, чтобы у меня были ссылки (я сделал xml-презентацию с фрагментами, но, увы, не общедоступную). Но основная идея довольно проста; создайте XMLStreamReader, просмотрите его, передайте JAXB Unmarshaller для привязки (убедитесь, что он указывает на START_ELEMENT; после привязки будет превышено соответствие END_ELEMENT).
- person StaxMan; 25.07.2011