2016-02-25 6 views
2

Недавно я получил старый XML через HTTP API. Он имеет несколько типов ответов, и все эти ответы не имеют атрибутов пространства имен или типов. Все они имеют один и тот же корневой узел, а затем другой набор дочерних узлов.XML UnMarshalling на основе дочерних узлов

Есть ли способ в java для UnMarshall таких XML? Это было бы похоже на использование дочерних узлов в качестве полей дискриминатора. Ниже приведены два примера ответов.

<Response> 
<A1/> 
<A2/> 
</Response> 

<Response> 
<B1/> 
<B2/> 
</Response> 

ответ

0

Лучший подход действительно зависит от того, что вы хотите сделать. Если вы просто хотите размонтировать данные, вы можете определить модель с использованием JAXB, например, которая включает в себя все потенциальные дочерние элементы. Затем, когда вы разобрали документы экземпляра, только дочерние элементы, фактически присутствующие в документе, будут иметь значения.

Если вы хотите иметь отдельные модели для разных вариантов ответа, лучшим вариантом будет использование BufferedInputStream и метки вызова() в начале, а затем достаточно прочитайте документ с помощью анализатора вытягивания, такого как XMLStreamReader, чтобы определить фактический тип ответа. Затем вы можете сбросить() поток до начала документа и начать с использования JAXB с соответствующей моделью данных.

Смежные вопросы