我正在使用JAXB API将Java对象映射到XML。我的Java类是
@XmlRootElement(name = "ad")
@XmlAccessorType(XmlAccessType.FIELD)
class Item {
@XmlElement(name = "id", nillable = false)
@XmlCDATA
private int id;
@XmlElement(name = "url", nillable = false)
@XmlCDATA
private String url;
public Item() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
输出是这样的:
<ad>
<id><![CDATA[ 104 ]]></id>
<url><![CDATA[www.google.com]]></url>
</ad>
我需要为url元素添加一个属性,例如:
<ad>
<id><![CDATA[ 104 ]]></id>
<url type="fr"><![CDATA[www.google.fr]]></url>
</ad>
我使用@XmlValue和@XmlAttribute尝试了很多组合......
答案 0 :(得分:1)
您的url变量不应该是String,而应该是它自己的类型。您应该为url项Url创建一个单独的类,并为其指定一个String字段,类型为@XmlAttribute
注释。
例如,
@XmlRootElement(name = "ad")
@XmlAccessorType(XmlAccessType.FIELD)
class Item {
@XmlElement(name = "id")
private int id;
@XmlElement(name = "url")
private Url url;
public Item() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
// @XmlAttribute
public Url getUrl() {
return url;
}
public void setUrl(Url url) {
this.url = url;
}
}
@XmlRootElement(name = "url")
@XmlAccessorType(XmlAccessType.FIELD)
class Url {
@XmlValue
private String value;
@XmlAttribute(name = "type")
private String type;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
请注意,我没有MOXY,因此我无法使用或测试您的@XmlCDATA
注释。