元素 'all' 无效、放错位置或出现太频繁

Element 'all' Is Invalid, Misplaced, Or Occurs Too Often

我正在尝试允许以下 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>

我得到的错误是

Element 'all' Is Invalid, Misplaced, Or Occurs Too Often.

首先,您应该能够使用 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>

你的XSD很好,除了你必须移动xs:allbeforexs: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",因为出现约束可能不会出现在顶级元素上。