xml - 错误 : The content of 'persons' must match (annotation? , (simpleType | complexType)?, (unique | key | keyref)*))

标签 xml xsd xsd-validation xml-validation

我正在尝试为 XML 键入 XSD,但发生错误。我不知道为什么会这样。我是 XML 的新手,所以不太了解它。 错误是:

Exception: s4s-elt-must-match.1: The content of 'persons' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: complexType.

非常感谢任何帮助或建议。

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">
    <xs:element name="persons">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="person" maxOccurs="unbounded" minOccurs="1" type="personType"/>
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="personType">
            <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" type="addType"/>
                <xs:element name="student" maxOccurs="unbounded" minOccurs="0" type="studentType"/>
                <xs:element name="staff" maxOccurs="unbounded" minOccurs="0" type="staffType"/>
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="addType">
            <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:complexType name="studentType">
            <xs:sequence>
                <xs:element name="rollno" type="xs:integer"/>
                <xs:element name="standard" type="xs:string"/>
                <xs:element name="section" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="staffType">
            <xs:sequence>
                <xs:element name="staffid" type="xs:integer"/>
                <xs:element name="stubject" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

最佳答案

需要两个修复:

  1. 在复杂类型之前关闭 personxs:element 标签 其余类型的声明。
  2. 修正一个拼写错误:stubject 应该是 `subjection.

总而言之,以下 XSD 将成功验证您的 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="persons">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="person" maxOccurs="unbounded" minOccurs="1" type="personType"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="personType">
    <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" type="addType"/>
      <xs:element name="student" maxOccurs="unbounded" minOccurs="0" type="studentType"/>
      <xs:element name="staff" maxOccurs="unbounded" minOccurs="0" type="staffType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="addType">
    <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:complexType name="studentType">
    <xs:sequence>
      <xs:element name="rollno" type="xs:integer"/>
      <xs:element name="standard" type="xs:string"/>
      <xs:element name="section" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="staffType">
    <xs:sequence>
      <xs:element name="staffid" type="xs:integer"/>
      <xs:element name="subject" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

关于xml - 错误 : The content of 'persons' must match (annotation? , (simpleType | complexType)?, (unique | key | keyref)*)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45642988/

相关文章:

java - Spring 系列不工作

java - 我可以重用 JAXB(或类似的)的现有部分来将模式类型基本映射到 Java 类型吗?

java - 在运行时向 Spring bean 添加属性值

c# - 如何在 C# 中反序列化具有前缀的 XML

java - 仅验证 Java 中的 XSD(XML 架构)

java - 有没有最好的方法来验证 Java 中 XSD 生成的 XML

java - 通过 Spring MVC 发送包含 XML 文档的 POJO

xsd - 支持 XSD 1.1 的 Java 库

XML/XSD publicId 和 systemId 之间需要空格

xml - 包括具有相同 XML 命名空间的 XSD?