【问题标题】:XSD: ComplexTypeXSD:复杂类型
【发布时间】:2018-12-07 19:31:15
【问题描述】:

我有一个 complexType,比如:

<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。有没有其他方法可以做到这一点?

谢谢!

【问题讨论】:

  • 会在 ComplexContent 帮助中添加 mixed="true" 吗?
  • 如果您的 NightlyRate 包含文本内容以及您要定义的元素,则添加 mixed=true 会有所帮助。

标签: xml xsd jaxb


【解决方案1】:

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

请参阅XSD complex elements at W3Schools 和 womp 的示例。

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

【讨论】:

    【解决方案2】:
    <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>
    

    【讨论】:

    • 这里的一些解释可能会有所帮助。
    • 它会抛出以下错误:“派生类型的内容类型及其基类型的内容类型必须都混合或两者都是元素。类型'NightlyRate'只是元素,但它的基本类型是不是。”
    • Ankush,这个错误意味着你的“xxx”元素也必须是一个 complexType。我假设它是,并且你会有它的属性。如果不是,并且它只是对其他地方定义的另一个元素类型的直接引用,请将其更改为 ,其中 xxx 是元素的名称。
    • 您好 Womp,感谢您提供的代码示例和解释,这使得它非常清楚。但是,我还有一个问题……我的“xxx”类型是 complexType,正如我所说的,它的属性类型是 com:Money,在我的架构中它本身就是 complexType。但是,我真的不需要扩展或添加任何属性。那么,不应该只说元素的名称及其类型就足够了吗?如果可以,那为什么我仍然会收到此错误?
    • 您是否已经在架构中的其他位置声明了 ?如果是这样,您可以只使用 而不是声明新元素。如果您尚未在其他地方声明它,并且它没有属性,请考虑将其作为 NightlyRate 的属性而不是元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多