例外:cvc-complex-type.2.4.b:元素'person'的内容不是完整的。其中一个“{}工作人员”有望

时间:2017-06-06 13:16:16

标签: xml xsd runtime-error xslt-1.0

人员将是根标签。人员将拥有每个人的姓名,年龄,性别,地址。一个人可以是学生或工作人员。学生将有rollno,标准和部分。如果是员工,那么工作人员和主题。每个学生必须有一个地址与以下入口 - doorno,街道,城市和州。 管理员提出了一个XML文档。

这是我的XML:

<?xml version="1.0" encoding="utf-8"?>
<persons>
    <person>
        <name>Tom</name>
        <age>11</age>
        <gender>M</gender>
        <address>
            <doorno>27</doorno>
            <street>Tony's road, koramangala</street>
            <city>Bangalore</city>
            <state>Karnataka</state>
        </address>
        <student>
            <rollno>10</rollno>
            <standard>6</standard>
            <section>A</section>
        </student>  
    </person>
    <person>
        <name>Shiny</name>
        <age>12</age>
        <gender>F</gender>
        <address>
            <doorno>10</doorno>
            <street>Main Bazar, Madiwala</street>
            <city>Bangalore</city>
            <state>Karnataka</state>
        </address>
        <staff>
            <staffid>123</staffid>
            <subject>Maths</subject>
        </staff>
    </person>
</persons>

和我的XSD:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

    <xs:element name="persons">
        <xs:complexType>
        <xs:sequence>
            <xs:element name="person" maxOccurs="unbounded">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="name" type="xs:string"/>
                    <xs:element name="age" type="xs:integer"/>
                    <xs:element name="gender" type="xs:string"/>
                    <xs:element name="address">
                        <xs:complexType>
                        <xs:sequence>
                            <xs:element name="doorno" type="xs:integer"/>
                            <xs:element name="street" type="xs:string"/>
                            <xs:element name="city" type="xs:string"/>
                            <xs:element name="state" type="xs:string"/>
                        </xs:sequence>
                        </xs:complexType>
                    </xs:element>



                    <xs:element name="student">
                        <xs:complexType>
                        <xs:sequence>
                            <xs:element name="rollno" type="xs:integer"/>
                            <xs:element name="standard" type="xs:integer"/>
                            <xs:element name="section" type="xs:string"/>
                        </xs:sequence>
                        </xs:complexType>
                    </xs:element>

                    <xs:element name="staff">
                        <xs:complexType>
                        <xs:sequence>
                            <xs:element name="staffid" type="xs:integer"/>
                            <xs:element name="subject" type="xs:string"/>
                        </xs:sequence>
                        </xs:complexType>
                    </xs:element>

                </xs:sequence>
                </xs:complexType>
            </xs:element>

        </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

我是XML和学习者的新手。

错误:

Exception: cvc-complex-type.2.4.b: The content of element 'person' is not comple te. One of '{staff}' is expected. 

1 个答案:

答案 0 :(得分:1)

您的XSD表示应<xs:element name="student">后跟<xs:element name="staff">,但您希望有#34;学生或员工&#34;。对于此XSD,还有另一个元素<xs:choice>

<xs:choice>
    <xs:element name="student">
        <xs:complexType>
        <xs:sequence>
            <xs:element name="rollno" type="xs:integer"/>
            <xs:element name="standard" type="xs:integer"/>
            <xs:element name="section" type="xs:string"/>
        </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="staff">
        <xs:complexType>
        <xs:sequence>
            <xs:element name="staffid" type="xs:integer"/>
            <xs:element name="subject" type="xs:string"/>
        </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:choice>

请查看另一个答案:How to specify in an XML schema that either one of two fields must be present?