S4s-elt-invalid-content.1:元素'元素'无效,错位或太频繁发生

时间:2016-04-29 18:38:28

标签: xml xsd xsd-validation xml-validation

我正在尝试使用给定的架构验证我的XML,但不断收到此错误。

  

S4s-elt-invalid-content.1:'coreTextType'的内容无效。   元素'元素'无效,错位或太频繁发生。

这是我的XML

<?xml version="1.0" encoding="UTF-8"?>
<authors>
  <coretext>
    <author id="VH">
      <name>Victor Hugo</name>
      <nationality>French</nationality>
     <rating>4.00</rating>
    </author>
    <author period="classical">
      <name>Sophocles</name>
      <nationality>Greek</nationality>
     <rating>15.00</rating>
    </author>
    <author>
      <name>Nikolai Gogol</name>
      <nationality>Russian</nationality>
      <rating>11.00</rating>
    </author>
  </coretext>
  <author>
    <name>Leo Tolstoy</name>
   <nationality>Russian</nationality>
   <rating>12.00</rating>
  </author>
  <author id ="AR">
    <name>Alexander Pushkin</name>
    <nationality>Russian</nationality>
    <rating>13.88</rating>
  </author>
  <author period="classical">
    <name>Plato</name>
    <nationality>Greek</nationality>
    <rating>20.15</rating>
  </author>
</authors> 

这是我的架构

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="authors">
        <xs:complexType>
            <xs:choice maxOccurs="unbounded">
                <xs:element name="coretext" type="coreTextType" />
                <xs:element name="author" type="authorType" />
            </xs:choice>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="coreTextType">
        <xs:element name="author" type="authorType" maxOccurs="unbounded"/>
    </xs:complexType>

    <xs:complexType name="authorType">
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="nationality" type="xs:string" />
            <xs:element name="rating" type="xs:integer" />
            <xs:attribute name="id" type="xsd:string" />
            <xs:attribute name="binding" type="xsd:string" />
        </xs:sequence>
    </xs:complexType>

</xs:schema>

请有人指出我正确的方向。?

1 个答案:

答案 0 :(得分:1)

您的XML很好,但您的XSD有很多错误:

  • xs:complexType作为孩子不能直接xs:element;包裹 它首先出现在xs:sequence中。 (这是与您当前的错误消息相关的错误。)
  • xs:attribute无法显示xs:sequence;将它们移到外面但仍在xs:complexType内。
  • xsd:未定义;你的意思是xs:
  • rating的类型应为xs:decimal,而不是xs:integer
  • @binding应为@period以匹配您的XML。

XSD

这是您的XSD将修复所有错误:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="authors">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="coretext" type="coreTextType" />
        <xs:element name="author" type="authorType" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="coreTextType">
    <xs:sequence>
      <xs:element name="author" type="authorType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="authorType">
    <xs:sequence>
      <xs:element name="name" type="xs:string" />
      <xs:element name="nationality" type="xs:string" />
      <xs:element name="rating" type="xs:decimal" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" />
    <xs:attribute name="period" type="xs:string" />
  </xs:complexType>

</xs:schema>

现在它将成功验证您的XML。