我目前在我的项目中遇到一个问题,即存在一个存储在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
如果有人可以帮助我,我会很感激。
答案 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>