XSD:禁止空元素

时间:2010-06-30 19:59:14

标签: xsd element

我有一个XML Schema,如下所示:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="A" minOccurs="0" maxOccurs="1"/>
                <xs:element name="B" minOccurs="0" maxOccurs="1"/>
                <xs:element name="C" minOccurs="0" maxOccurs="32"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

根据此架构,以下内容有效:

<root xsi:noNamespaceSchemaLocation="MySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</root>

但是,我想使上述XML无效。

更具体地说,我想要求:   1. <root>至少有一个子元素,可以是<A><B><C>,以及   2. <root>最多只有一个<A>个孩子,最多只有一个<B>个孩子。

建议?


解决方案是:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:choice>
                <xs:sequence>
                    <xs:element name="A"/>
                    <xs:element name="B" minOccurs="0"/>
                    <xs:element name="C" minOccurs="0" maxOccurs="32"/>
                </xs:sequence>
                <xs:sequence>
                    <xs:element name="B"/>
                    <xs:element name="C" minOccurs="0" maxOccurs="32"/>
                </xs:sequence>
                <xs:sequence>
                    <xs:element name="C" minOccurs="1" maxOccurs="32"/>
                </xs:sequence>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>

2 个答案:

答案 0 :(得分:0)

您是否尝试将minOccurrs=1添加到xs:sequence

答案 1 :(得分:0)

如何正确使用一个xs:选择A,B或C,然后选择0或者更多?

啊,你的编辑它必须是A,AB或B的选择,然后是0到32 Cs。是