Как разобрать XML-тег библиотекой Javax.xml

Я пытаюсь разобрать простой файл XML, например:

<customer id = "100">
    <age value = " 29"/>
    <name value = "Bob"/>
</customer>

Я использовал библиотеку JAX таким образом:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

    @XmlAttribute(name = "id")
    String id;
    @XmlAttribute(name = "value")
    String value;
    String name;
    String age;

    public String getName() {
        return name;
    }

    @XmlElement(name = "value")
    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    @XmlElement(name = "value")
    public void setAge(String age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    @XmlElement(name = "id")
    public void setId(String id) {
        this.id = id;
    }
}

Существует исключение IllegalAnnotationException. У меня истек срок действия этой ссылки: здесь, но безуспешно.

age и name не являются атрибутами в вашем XML. Это дочерние узлы. Если бы ваш XML был чем-то вроде <customer id = "100" age = "29" name = "Bob">..., он был бы другим. Тогда age и name будут прямыми атрибутами вашего узла customer.
bkis 28.05.2019 13:37

Мой файл XML не может измениться, извините за это. Пример взят отсюда: mkyong.com/java/jaxb-hello-world-пример, но отчет xml в моем случае

OutOfMemoryError 28.05.2019 13:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку значения «имя» и «возраст» на самом деле являются атрибутами дочерних узлов, вы должны извлечь их в отдельный класс, например:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public static class Customer {

    @XmlAttribute
    String id;

    @XmlElement
    NameAgeValue name;

    @XmlElement
    NameAgeValue age;

    public String getId() {
        return id;
    }

    public String getAge() {
        return (age == null) ? null : age.value;
    }

    public String getName() {
        return (name == null) ? null : name.value;
    }
}

@XmlType
public static class NameAgeValue {

    @XmlAttribute
    String value;
}

У меня кстати только id=100, а имя и возраст пустые(" ")

OutOfMemoryError 28.05.2019 13:51

Я проверил свой код на вашем примере XML. getAge и getName проанализированного объекта возвращают ожидаемый результат.

Alex Salauyou 28.05.2019 14:01

осторожный класс NameAgeValue должен быть в основных скобках класса Customer, а класс Customer не статичен;)

OutOfMemoryError 28.05.2019 14:31

@OutOfMemoryError это фрагмент из тестового класса, поэтому Customer также является статическим внутренним

Alex Salauyou 28.05.2019 14:34

Другие вопросы по теме