XSD:指定文本节点属性的名称

时间:2013-04-23 20:19:47

标签: java jaxb xsd xjc

我使用XML模式和xjc来生成java类。我想定义一个如下所示的XML结构:

<unicorn color="white" superpower="transmogrification">Sparklemallow</unicorn>

具体来说,它有属性和文本节点。我可以这样定义:

<xs:complexType name="unicorn">
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute name="color" type="xs:string"/>
      <xs:attribute name="superpower" type="xs:string"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

当我生成Java类时,默认情况下,文本节点表示的属性称为value

public class Unicorn implements Serializable
{
    protected String value; //want to rename this
    protected String color;
    protected String superpower;

    ...

    public void setValue(String value) {
        this.value = value;
    }

    public boolean isSetValue() {
        return (this.value!= null);
    }
}

我想将文本节点属性重命名为更符合语义的东西 - 在本例中为name。有没有办法指定这个属性的名称应该是什么?

1 个答案:

答案 0 :(得分:2)

我可以通过在xs:complexType节点下添加注释来更改此属性的名称:

<xs:complexType name="unicorn">
  <xs:annotation>
    <xs:appinfo>
      <jaxb:property name="name"/> <!-- your property name here -->
    </xs:appinfo>
  </xs:annotation>
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute name="color" type="xs:ID"/>
      <xs:attribute name="superpower" type="xs:string"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>