XSD:ComplexType

时间:2009-06-09 21:47:28

标签: xml xsd jaxb

我有一个类似的复杂类型:

<xsd:complexType name="NightlyRate">
    <xsd:complexContent>
        <xsd:extension base="com:Money">
            <xsd:attribute name="night" type="com:Number" use="required"/>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

现在,我想将一个子元素添加到“NightlyRate”,它本身是complexType。我尝试添加:

<xsd:element name="xxx" type"com:Money"/>

在complexContent元素之后,但是抛出错误的那个元素是不期望的,也是问题的一部分,这个复杂元素的类型与扩展基类型相同。我正在使用JAXB。还有其他方法可以达到这个目的吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

要获取xsd:complexType中的子元素,您必须在其中放置xsd:sequence(第一级,连同注释和属性),并指出您想要的...元素。在此序列中,您可以包含其他已定义类型的元素或定义新类型。

参见XSD complex elements at W3Schools和womp的例子。

在某些情况下,您可能希望使用xsd:any元素来允许尚未定义的扩展(松散)。

答案 1 :(得分:1)

<xsd:complexType name="NightlyRate">
    <xsd:complexContent>
        <xsd:extension base="com:Money">
            <xsd:sequence>
                <xsd:element name="xxx" type"com:Money">
                   <xsd:complexType>
                      <xsd:complexContent>
                             /// Attributes here
                      </xsd:complexContent>
                   </xsd:complexType>
                </xsd:element>
            </xsd:sequence>

            <xsd:attribute name="night" type="com:Number" use="required"/>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>