在JAXB API中向xml元素添加属性

时间:2014-09-07 22:10:35

标签: java xml jaxb xml-attribute

我正在使用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尝试了很多组合......

1 个答案:

答案 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注释。