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

标签 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 的多种组合...

最佳答案

你的 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/

相关文章:

java - 将 spring java-configuration 文件放在 maven 文件夹结构中的什么位置

android - 如何在 Imageview 上有 selectableItemBackground?

java - 使用 JAXB 以不同方式编码模型

java - JSON 响应 : Spring with JAXB

java - 调用方法时 "this"在 Java 中如何工作?

java - XPath:提取多个子节点值

sql - T-SQL XQuery 用于为每个嵌套元素的每个匹配的 XML 值返回一个结果行

java - 使用 JAXB 编码(marshal)至文件时收到 FileNotFoundException(访问被拒绝)

运行时两个类之间的 JAVA 类型安全

c# - .Net 2.0 的 XDocument?