В JAXB или Xstream можно отфильтровать определенные дочерние элементы по типу/значению во время демаршалла.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 В JAXB или Xstream можно отфильтровать определенные дочерние элементы по типу/значению во время демаршалла.

Сообщение Anonymous »

Надеюсь, что все в порядке, небольшой вопрос, чтобы узнать, есть ли у кого-нибудь отзывы.

Последние два дня я экспериментировал как с JaxB, так и с Xstream. В основном я использовал библиотеки XML для маршалирования и демаршалинга XML в/из объектов Java. Это была очень простая задача, с которой я справился очень быстро. Однако XML, который я хочу преобразовать в список объектов Java, очень длинный и содержит множество дочерних элементов, которые можно игнорировать и не помещать в список объектов Java.
Например, XML-файл будет выглядеть примерно так:

Код: Выделить всё



Test1
2014-01-16
True


Test2
2014-01-15
False


Test1
2014-01-14
True


Поэтому я хотел бы, чтобы библиотека перебирала все элементы xml и демаршалировала их в список объектов Java, который до сих пор работает, однако по мере итерации я хотел бы добавить дополнительную функциональность для проверки значений элементов Type и Flag, если значение TYPE равно Test2 и или если значение Flag равно False, чтобы игнорировать этот дочерний элемент все вместе и не включать его в готовый список объектов Java. Кто-нибудь знает, возможно ли это с помощью JaxB или Xstream? В качестве альтернативы, может ли кто-нибудь предложить лучший подход для достижения этой цели, который требует минимального кода и ручного анализа.

Я смотрел ValidationEventHandler и XmlAdapter в JaxB, но не думаю, что они позволят мне делать то, что я хочу. Я приблизился к Xmldapter, однако unmarshal должен возвращать либо ноль, либо объект для каждого дочернего элемента xml, который он обрабатывает, он также изменил синтаксис xml на форму атрибута, т. е. TYPE = «Test1» и т. д., который я не видел никакого способа изменить.

Xstream позволяет реализовать Converter с методом canConvert, однако это работает только с типом класса, а не с типом дочернего элемента, который я хотел проверить для каждого дочернего элемента. Посмотрел метод WrapMapper MapperWrapper, который можно перегрузить в Xstream, но он показывает только имя атрибута элемента, т. е. FLAG, и не показывает значение, а также, если он действительно показывал значение, я в любом случае не вижу указания функции игнорировать дочерний корневой элемент и все атрибуты для указанного дочернего элемента.

В любом случае, это мои два цента. Есть совет?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»