Я использую SimpleXml на Android для десериализации xml, который у меня нет. Теперь, каждый раз, когда xml изменяется, он тормозит мое приложение, потому что у меня нет нового элемента, определенного в моем классе объектов. Есть ли способ, который я мог бы указать SimpleXML, чтобы игнорировать эти ракеты? Посмотрел документацию и не нашел ничего, чтобы помочь мне ее решить.
Используя SimpleXML, как игнорировать элементы xml, которых у меня нет в классе объектов при десериализации
Ответ 1
Я уверен, что вы можете обойти строгое сопоставление, заменив регулярное объявление @Root
на @Root(strict=false)
, что устранит требование, чтобы каждый элемент должен соответствовать полю в определении вашего класса. Точнее, из документации:
Это используется для определения того, должен ли отображаемый объект быть строго разбирается. Строгий анализ требует, чтобы каждый элемент и атрибут в документе XML соответствует полю в схеме класса. Если элемент или атрибут не соответствует полю, тогда синтаксический анализ сбой исключается. Установка строгого разбора на false позволяет детали в исходном XML-документе, который должен быть пропущен во время десериализации.
Там также пример, указанный в списке руководств на сайте проекта Simple XML.
Ответ 2
Вы можете указать строгий режим для всех тегов для определенного read
, добавив в качестве последнего параметра значение "false". Также из их документации:
Если существует более одного объекта, который требует свободного отображения, то использование аннотации Root может быть не идеальным решением. В таком сценарии у самого персистского может быть предложено выполнить свободное отображение. Просто передайте логическое значение для метода чтения, указывающего необходимый тип отображения. По умолчанию persister использует строчное сопоставление, которое может быть переопределено на основе объекта по объектам с использованием аннотации Root, как показано в приведенном выше примере. Однако это значение по умолчанию можно переопределить, как показано в нижеприведенном фрагменте кода.
Contact contact = serializer.read(Contact.class, source, false);