我有一个外部提供的XSD,它有许多相同的元素,代表一个具有可选货币属性的价格。
<xs:complexType name="someType">
<xs:sequence>
<xs:element name="rrp" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="currency" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="whs" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="currency" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
我希望将它转换为一个公共类而不是许多静态类,这是否可以使用XJB映射文档?
答案 0 :(得分:2)
我不知道用JAXB注释做到这一点的方法,但这并不是说不可能。也许有人会在那里给你一个更好的答案。
解决这个问题的理想方法显然是更改XSD,以便您拥有“PriceWithcurrency”xs:complexType定义,并且每个元素都声明为该类型。但是你说你无法改变它。
我试过的一件事就是创建一个XSD的变体来做到这一点,为它保留相同的命名空间定义并生成jaxb类。它应该与使用原始XSD生成的XML文档实例一起使用。