【问题标题】:How to rename XML attributes from Java classes using JAXB annotations?如何使用 JAXB 注释从 Java 类中重命名 XML 属性?
【发布时间】:2010-07-28 16:17:35
【问题描述】:

我有这个类定义:

@XmlRootElement
public class RssRoot {

private String _version;

private String _xmlns_content;

@XmlAttribute()
public String get_version() {
    return _version;
}

@XmlAttribute()
public String get_xmlns_content() {
    return _xmlns_content;
}

public void set_version(String version) {
  _version = version;
 }

 public void set_xmlns_content(String xmlnsContent) {
  _xmlns_content = xmlnsContent;
 }

 public RssRoot() {
  super();

  this._version = "2.0";
  this._xmlns_content = "http://purl.org/rss/1.0/modules/content/";
 }

}

它会生成这个 xml:

<rssRoot xmlnsContent="http://purl.org/rss/1.0/modules/content/" version="2.0"/>

但是,我需要将 xmlnsContent 重命名为 xmlns:content,并将 rssRoot 重命名为 rss。我该怎么做?

我尝试在 getter 上方和属性声明附近使用 @XmlAttribute(name = "xmlns:content"),但没有运气。事情失败并显示此消息:

根异常堆栈跟踪: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:IllegalAnno 计数 1 状态异常 类有两个同名的属性“_xmlns_content” 此问题与以下位置有关:RssRoot

我还能做什么?

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

    最好使用现有的库来支持 RSS(例如 ROME),而不是创建自己的库。

    但如果你真的想要:

    • xmlns:content 不是属性,而是命名空间声明。当生成的 XML 包含该命名空间中的元素时,JAXB 会自动将其添加到生成的 XML 中(元素的命名空间可以使用 @XmlElement@XmlRootElement 等中的 namespace 属性指定)。

    • 要将rssRoot 重命名为rss,请写@XmlRootElement(name = "rss")

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 2018-11-29
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多