используя SimpleXML, как игнорировать xml-элементы, которых нет в моем классе объектов при десериализации

Я использую SimpleXml на Android для десериализации xml, над которым у меня нет контроля. Теперь каждый раз, когда xml изменяется, он тормозит мое приложение, потому что у меня нет нового элемента, определенного в моем классе объектов. Есть ли способ указать SimpleXML, чтобы игнорировать эти missmaps? Посмотрел документацию и не могу найти ничего, что помогло бы мне ее решить.

2 ответов


Я уверен, что вы можете обойти строгое отображение, заменив свой обычный @Root декларации @Root(strict=false), что устранит требование, чтобы каждый элемент соответствовал полю в определении класса. Точнее, из документации:

это используется для определения того, должен ли представленный объект быть разбирался строго. Строгий анализ требует, чтобы каждый элемент и атрибут в XML-документе соответствует a поле в схеме класса. Если элемент или атрибут не соответствует полю, то синтаксический анализ сбой с исключением. Установив строгий парсинг в false позволяет сведения в исходном XML-документе, которые необходимо пропустить во время десериализация.

там же пример приведено в списке учебных пособий на сайте проекта Simple XML.


вы можете указать строгий режим, который будет отключен для всех тегов для конкретного read путем добавления "false" в качестве последнего параметра. Также от документация:

Если существует более одного объекта, который требует свободного отображения, то использование корневой аннотации не может быть идеальным решением. В таком сценарии самого persister можно попросить выполнить свободное отображение. Просто передайте boolean методу read, указывающему тип отображения требуемый. По умолчанию persister использует строгое сопоставление, которое может быть переопределено для объекта по объекту с помощью корневой аннотации, как показано в приведенном выше примере. Однако это значение по умолчанию можно переопределить, как показано в приведенном ниже фрагменте кода.

Contact contact = serializer.read(Contact.class, source, false);