“元素'X'具有无效的子元素'Y'。预期的可能元素列表:'Z'。”

时间:2014-07-01 07:40:53

标签: xml xsd schema

我在这里有点新学习XSD Schema。我有一个上传XML文件的函数,首先它上传模式然后当它上传XML文件时它抛出了这个异常:

"The element 'X' has invalid child element 'Y'. List of possible elements expected: 'Z'."

这是我的XSD文件:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="survey">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="***"/>
        <xs:element name="questions">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="X" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                       <xs:complexType>
                        <xs:sequence>
                          <xs:element name="option" maxOccurs="unbounded" minOccurs="0">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:string">
                                  <xs:attribute type="xs:string" name="***" use="optional"/>
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Y" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Z">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="***" maxOccurs="unbounded" minOccurs="0">
                                  <xs:complexType>
                                    <xs:simpleContent>
                                      <xs:extension base="xs:byte">
                                        <xs:attribute type="xs:string" name="***" use="optional"/>
                                      </xs:extension>
                                    </xs:simpleContent>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute type="xs:string" name="***" use="optional"/>
                        <xs:attribute type="xs:string" name="***" use="optional"/>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="Z" minOccurs="0">
                    <xs:complexType>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="***">
          <xs:complexType>
            <xs:sequence>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我看过类似的帖子,有些人建议将<xs:sequence>更改为<xs:all>;我这样做但是没有用。其他人建议在根元素中添加elementFormDefault="qualified"属性,但它也无效。

我仍然不明白什么是真正的问题。

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

至少你的XSD出现了错误:

结束&#34;&#34;在宣布&#34; Y&#34;之前元素不正确。 删除它,我的猜测是它会工作。

<xs:element name="X" maxOccurs="unbounded" minOccurs="0">
            <xs:complexType>
              <xs:sequence>
                   <xs:complexType>
                    <xs:sequence>
                      <xs:element name="option" maxOccurs="unbounded" minOccurs="0">
                        <xs:complexType>
                          <xs:simpleContent>
                            <xs:extension base="xs:string">
                              <xs:attribute type="xs:string" name="***" use="optional"/>
                            </xs:extension>
                          </xs:simpleContent>
                        </xs:complexType>
                      </xs:element>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element> <------- REMOVE THIS
                <xs:element name="Y" minOccurs="0">