Хранение содержимого XML-тега в другой переменной с использованием JAXB - PullRequest
0 голосов
/ 08 мая 2018

В настоящее время у меня есть проблема в моем проекте, которая вызывает XML, хранящийся в переменной String. Я пытаюсь сохранить содержимое XML в разных переменных.

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

Это мой XML

<?xml version="1.0" encoding="UTF-8"?>
<PORTAL>
    <NAME>PERSON 2.0</NAME>
    <ID>99995</ID>
    <DATAGENERATIO>2008-04-10</DATAGENERATIO>
    <HOURGENERATIO>05:07:35</HOURGENERATIO>
    <LANGUAGE>EN</LANGUAGE>
    <XMLVERSIO>1.0</XMLVERSIO>
</PORTAL>

И этот класс используется для хранения содержимого этого XML.

@XmlRootElement(name="PORTAL")
public class ApiPubPortal {

    private long idPortal;
    private String idIdioma;
    private String nombre;
    private Date dataGeneracio;
    private String versionXml;
}

Я уже пытаюсь использовать @XmlElement(name="ID"), но это дает мне IllegalAnnotationExceptions

Если кто-нибудь сможет мне помочь с этим, я буду благодарен.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

С SimpleXml вы можете использовать аннотацию @XmlName, чтобы сообщить анализатору, какое имя тега XML связано с полем. Нет необходимости в геттерах и сеттерах в вашем POJO. Это будет работать:

@XmlName("PORTAL")
public class ApiPubPortal {
    @XmlName("ID")
    private long idPortal;
    private String idIdioma; // Its not clear to which XML tag this maps
    @XmlName("NAME")
    private String nombre;
    @XmlName("DATAGENERATIO")
    private String dataGeneracio;
    @XmlName("XMLVERSIO")
    private String versionXml;
}

Ваш XML можно затем сериализовать следующим образом:

final String xml = ...
final SimpleXml simple = new SimpleXml();
final ApiPubPortal portal = simple.fromXml(xml, ApiPubPortal.class);

Библиотека находится в Maven Central:

<dependency>
    <groupId>com.github.codemonstur</groupId>
    <artifactId>simplexml</artifactId>
    <version>1.4.0</version>
</dependency>
0 голосов
/ 08 мая 2018

Вы должны убедиться, что у вас есть геттеры и сеттеры для всех ваших личных полей. Пример приведен ниже:

private long idPortal;

@XmlElement(name = "ID")
public long getIdPortal()
{
 return idPortal;
}
public void setIdPortal(long idPortal)
{
 this.idPortal = idPortal;
}

Пожалуйста, обратите внимание, чтобы поместить @XmlElement (name = "ID") в ваш геттер.

...