我正在使用 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 的多种组合...
最佳答案
你的 url 变量不应该是字符串,而应该是它自己的类型。您应该为 url 项 Url 创建一个单独的类,并为其指定一个带有 @XmlAttribute
注释的 String 字段类型。
例如,
@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
注释。
关于java - 在 JAXB API 中向 xml 元素添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25715234/