使用JAXB将XML标记内容存储到不同的变量

时间:2018-05-08 10:14:21

标签: java xml spring jaxb unmarshalling

我目前在我的项目中遇到一个问题,即存在一个存储在String变量中的XML。我试图在不同的变量中保存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 :(得分:3)

您需要确保所有私人字段都有getter和setter。下面给出一个例子:

private long idPortal;

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

请注意将@XmlElement(name =&#34; ID&#34;)放在您的getter上。

答案 1 :(得分:0)

使用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中央:

<dependency>
    <groupId>com.github.codemonstur</groupId>
    <artifactId>simplexml</artifactId>
    <version>1.4.0</version>
</dependency>