为什么XSD说我的元素不完整?

时间:2010-02-06 09:28:04

标签: xml xsd

我有这种形式的XSD:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/example"
    xmlns:tns="http://www.example.org/example" elementFormDefault="qualified">

    <complexType name="bType">
    </complexType>

    <complexType name="aType">
        <choice maxOccurs="unbounded">
            <element name="a" type="tns:aType" />
            <element name="b" type="tns:bType" />
        </choice>
    </complexType>

    <element name="topelement">
        <complexType>
            <sequence>
                <element name="a" type="tns:aType" maxOccurs="1" />
            </sequence>
        </complexType>
    </element>
</schema>

我希望与之匹配的XML文件,例如:

<?xml version="1.0" encoding="UTF-8"?>
<topelement xmlns="http://www.example.org/example"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/example example.xsd ">
  <a> <!-- Error on this line. -->
    <a/>
    <b/>
    <b/>
    <a/>
  </a>
</topelement>

不幸的是,XSD说这对以下错误无效:

cvc-complex-type.2.4.b: The content of element 'a' is not complete. One of '{"http://www.example.org/example":a, "http://www.example.org/example":b}' is expected.  example.xml line 5

据我所知,我已经完成了标签完成所需的一切。我已经用无限选择的'a'和'b'标签填充它。任何人都可以看到出了什么问题吗?

为了澄清,我希望在topelement下只有一个'a'标签,在其下面,混合了'a'和'b'标签。

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

错误发生在第二个a,而不是第二个a需要在其下方选择的第一个错误。

答案 2 :(得分:1)

解决了......错误是误导性的,因为它抱怨错误的'a'。

将顶级'a'重命名为'c',它仍会在第5行抱怨'a'。

修复是将minOccurs = 0添加到choice元素中,这样就不是所有'a'元素都需要子元素。