2015-12-12 3 views
0

В настоящее время я пытаюсь развязать xml получить ответ в один сложный Java-объект. Этот Java-объект имеет другие классы в качестве полей, поэтому он очень глубокий. Теперь я использую JaxbMarshaller2 для этой работы. Пока все идет хорошо, но теперь у меня есть вопрос:@XMLRootElement элемент или имя массива

В принципе один из тегов в потоке XML называется «изображениями» и содержит массив отдельных элементов изображения, каждый из которых заключен в «элемент», тег.

<images> 
    <item> 
     <name></name> 
    </item> 
    <item> 
     <name></name> 
    </item> 
</images> 

Теперь в моем корневом классе Java, у меня есть свойство изображения, который представляет собой список из этих элементов изображения (я сделал пользовательский класс для этих элементов.)

@XmlElement(name = "images") 
private List<ProductImage> images; 

Ok, теперь внутри класса ProductImage будет ли корневой элемент XML выше имени класса @XmlRootElement(name="images") или @XmlRootElement(name="item")?

Спасибо за ваши ответы.

ответ

0

Аннотации @XmlRootElement необходимо только для корневого элемента вашего xml-файла. Каждый родитель всегда определяет имена тегов своих дочерних элементов. Но поскольку корневой элемент не имеет родителя, существует дополнительная аннотация, необходимая для определения его имени (то есть @XmlRootElement).

Option1:

Предполагая, что <images> узла является корневым узлом вашего файла XML. Создайте класс ProductImageCollection, который содержит аннотацию @XmlRootElement(name="images").

Внутри этого класса должен быть List<ProductImage> который имеет аннотацию @XmlElement(name="image")

option2:

Если предположить, что вашего <images> узла является частью более крупной структуры XML, которая уже имеют правильные аннотации.

Тогда вам не нужны дополнительные примечания @XmlRootElement. Вы можете напрямую аннотировать свой список @XmlElementWrapper(name="images").

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