我正在创建一个XSD来表示以下XML结构。
<DETAILS>
<REFERENCE></REFERENCE>
<INFORMATION>
<INFO>
<KEY></KEY>
<VALUE></VALUE>
<KEY></KEY>
<VALUE></VALUE>
<KEY></KEY>
<VALUE></VALUE>
<KEY></KEY>
<VALUE></VALUE>
.....
</INFO>
</INFORMATION>
我打算使用相同的XSD使用XJC生成带有JAXB注释的Java类。 我设法获得以下XSD。
<xs:complexType name="DetailsType">
<xs:annotation>
<xs:appinfo>
<jaxb:class name="Details" />
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element type="xs:int" name="REFERENCE">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="reference" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element type="InformationType" name="INFORMATION">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="Information" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="InformationType">
<xs:annotation>
<xs:appinfo>
<jaxb:class name="Information" />
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="INFO" type="InfoType">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="Info" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="InfoType">
<xs:annotation>
<xs:appinfo>
<jaxb:class name="Info" />
</xs:appinfo>
</xs:annotation>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="KEY" type="xs:string" />
<xs:element name="VALUE" type="xs:string" />
</xs:sequence>
</xs:complexType>
但是使用这个XSD,XJC使用JAXBElement生成Java类,比如
@XmlElementRefs({
@XmlElementRef(name = "KEY", type = JAXBElement.class),
@XmlElementRef(name = "VALUE", type = JAXBElement.class)
})
protected List<JAXBElement<String>> keysAndValues;
对于重复元素序列的这种简单的XML,使用JAXBElement的开销似乎很烦人。 我错过了什么吗?
我对XSD采用不同的方法或者有人可以提供一种方法来告诉JAXB生成更有意义的类(请不要使用JAXBElement)?