如何创建元素并设置自定义属性以映射简单类型类属性

时间:2014-10-03 15:59:31

标签: java xml jaxb

@XmlRootElement(name="flowPane")
public class Image implements Serializable {
    public  String name;
    public  String description;
}

绑定到

<flowPane>
    <label text="name"/>
    <label text="description"/>
</flowPane>

尝试简单地在名称和描述属性上放置@XmlAttribute和@XmlElement注释,但两者都不是我正在寻找的解决方案。

2 个答案:

答案 0 :(得分:1)

您必须使用新类

包装字段
@XmlRootElement(name="flowPanel")
public class Image implements Serializable {

    public static class Label {
        @XmlAttribute()
        public String text;

        public Label(){}

        public Label(String text) {
            this.text = text;
        }   
    }

    @XmlElement(name="label")
    public Label name;
    @XmlElement(name="label")
    public Label description;    
}

答案 1 :(得分:1)

使用标准JAXB API

为了使相同的元素在XML文档中多次出现,您将需要List属性。请注意,在下面的示例中,label将具有映射到text属性的属性。

@XmlRootElement(name="flowPanel")
@XmlAccessorType(XmlAccessType.FIELD)
public class Image implements Serializable {

   @XmlElement(name="label").
   private List<Label> labels;

}

EclipseLink JAXB(MOXy)中的

@XmlPath扩展

如果您使用EclipseLink MOXy作为JAXB (JSR-222)提供商,那么您可以利用我们为此用例添加的@XmlPath扩展程序。

@XmlRootElement(name="flowPane")
public class Image implements Serializable {
    @XmlPath("label[1]/@text")
    public  String name;

    @XmlPath("label[1]/@text")
    public  String description;
}

了解更多信息

我在博客上写了更多关于此的内容: