元素'all'无效,错位或太频繁发生

时间:2016-08-13 18:04:59

标签: xml xsd xsd-validation xml-validation

我试图允许以下XML模式:

<Locales>
    <Locale Language="FR">
        <Name>La Jetée</Name>
    </Locale>
    <Locale Language="EN">
        <Name>The Jetty</Name>
    </Locale>
</Locales>

这是我目前拥有的XSD,但它提供了有关属性的错误。当我删除它验证的属性时

<xs:element name="Locales" minOccurs="0">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Locale" maxOccurs="unbounded" minOccurs="1">
                <xs:complexType>
                    <xs:attribute name="Language" use="optional"/>
                    <xs:all>
                        <xs:element name="Name" type="xs:string" minOccurs="0"/>
                    </xs:all>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

我得到的错误是

  

元素'all'无效,错位或太频繁发生。

2 个答案:

答案 0 :(得分:1)

你的XSD很好,除非你必须在 xs:all之前移动xs:attribute ; xs:attribute之后可能不会显示,因此错误。

以下是适用上述更改的XSD片段:

  <xs:element name="Locales">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Locale" maxOccurs="unbounded" minOccurs="1">
          <xs:complexType>
            <xs:all>
              <xs:element name="Name" type="xs:string" minOccurs="0"/>
            </xs:all>
            <xs:attribute name="Language" use="optional"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

它将成功验证您的XML。请注意,它还会删除minOccurs="0",因为出现限制可能不会出现在顶级元素上。

答案 1 :(得分:0)

首先,您应该能够使用http://www.freeformatter.com/xsd-generator.html之类的工具来推断所需的xsd结构。

对于上述情况,以下内容应该有效:

<xs:element name="Locales">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Locale" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element type="xs:string" name="Name"/>
          </xs:sequence>
          <xs:attribute type="xs:string" name="Language" use="optional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>