我试图允许以下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'无效,错位或太频繁发生。
答案 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>