当包含complexType时,如何使顶级xsd:element可选?

时间:2012-08-30 20:30:51

标签: xml xml-parsing xsd xsd-validation

我定义了这个XSD元素:

<xsd:element name="CU_FIRST_NAME">
    <xsd:annotation>
        <xsd:documentation>
            The first name of the customer that is getting billed for the order
        </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="50"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>

我知道这可以被单个元素替换,但我有一个更复杂的元素(一个序列),我需要使它成为可选项。

有没有办法让第一个孩子(即层次结构中的<xsd:schema>以下)元素可选?

要清楚,我想让整个CU_FIRST_NAME节点及其所有子节点都是可选的。

2 个答案:

答案 0 :(得分:1)

我最终意识到我使用的元素实际上是更高级别对象中的引用。

我解决这个问题的方式是:

原始代码:

<xsd:element ref="CU_FIRST_NAME"/>

新代码:

<xsd:element ref="CU_FIRST_NAME" minOccurs="0"/>

所以,我真的在问错误的问题。

答案 1 :(得分:0)

<xs:element name="item" maxOccurs="unbounded">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="note" type="xs:string" minOccurs="0"/>
      <xs:element name="quantity" type="xs:positiveInteger"/>
      <xs:element name="price" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

在第一个元素中使用minOccurs="0"。这将使它如果你选择顶部你必须选择其余的。但如果你把它放在孩子身上那么它们都是可选的。