#java #xml #jaxb
#java #xml #jaxb
Вопрос:
@XmlRootElement(name = "toplist")
class toplist {
private String description;
private List<Item> items= new ArrayList<Item>();
@XmlElement(name = "description")
public String getDescription() {...}
public String setDescription() {...}
@XmlElement(name = "item")
@XmlElementWrapper(name = "items")
public List<ChartResultItem> getToplistEntries() {...}
}
class Item {
private String attr1;
private String attr2;
private String attr3;
// getter and setter with
// @XmlAttribute(name = "atter1"), @XmlAttribute(name = "atter2") and etc
}
И xml
<?xml version="1.0" encoding="UTF-8"?>
<toplist>
<description>This is description.</description>
<items>
<item attr1="" attr2="" attr3="">value1</item>
<item attr1="" attr2="" attr3="">value2</item>
<item attr1="" attr2="" attr3="">value3</item>
...
</items>
</toplist>
Как я могу получить значение1, значение2, значение3 и т.д. В классе Item (с помощью jaxb)?
Ответ №1:
Ответ Jom правильный ( 1). Вот пример для дальнейшего объяснения:
@XmlAccessorType(XmlAccessType.FIELD)
public class Item {
@XmlValue
protected String value;
@XmlAttribute
protected String attr1;
@XmlAttribute
protected String attr2;
@XmlAttribute
protected String attr3;
}
Комментарии:
1. Если я использую аннотацию XmlValue, то получаю исключение com.sun.xml.bind.v2.runtime. Исключение IllegalAnnotationsException: 2 подсчета исключений illegalannotationexception Если класс имеет свойство @XmlElement, у него не может быть свойства @XmlValue .
2. Да, это имеет смысл. Содержит ли ваш тег Item текст, а также вложенные элементы? XmlValue и XmlAttribute должны находиться в классе Item, а не в классе toplist.
3. Не в качестве подэлементов это xml <?xml version=»1.0″ encoding=»UTF-8″?> <toplist> <description>Это описание. </description> <items> <item attr1=»» attr2=»» attr3=»»>value1</item> <item attr1=»» attr2=»» attr3=»»>value2</item> <item attr1=»» attr2=»» attr3=»»>value3</item> … </items> </toplist>
4. Извините, я не понял вашего последнего комментария. Пожалуйста, опубликуйте весь ваш класс Item, чтобы мы могли видеть, откуда вы получаете эту ошибку.
5. Если вы собираетесь аннотировать поля, вам также следует использовать аннотацию уровня класса: @XmlAcessorType (XmlAcessType. ПОЛЕ). Это решит проблему, которую вы видите.
Ответ №2:
Вероятно, вы ищете аннотацию XmlValue.