错误:s4s-elt-must-match.1:'sequence'的内容必须与

时间:2017-07-03 10:03:07

标签: xml xsd xsd-validation xml-validation

当我尝试针对XSD验证XML时出现以下错误:

  

[错误] try.xsd:20:46:s4s-elt-must-match.1:'sequence'的内容   必须匹配(注释?,(元素|组|选择|序列|   任何)*)。从:complexType开始发现问题。

我的XML如下:

<?xml version="1.0"?>
<ArrayOfAccountParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <AccountParameterInfo>
    <Name>System Name</Name>
    <Identifier>1</Identifier>
    <Type>8</Type>
    <Length>20</Length>
    <Order>1</Order>
    <MinValue />
    <MaxValue />
    <Default />
    <CodePage>1252</CodePage>
    <Section>-1</Section>
    <Tab>-1</Tab>
    <Row>-1</Row>
    <Column>-1</Column>
  </AccountParameterInfo>    
  <AccountParameterInfo>
    <Name>Siren Arming Indication</Name>
    <Identifier>2</Identifier>
    <Type>7</Type>
    <Length>1</Length>
    <Order>1</Order>
    <MinValue />
    <MaxValue />
    <Default />
    <CodePage>1252</CodePage>
    <SelectorList>
      <string>None</string>
      <string>AllCases</string>
      <string>KeyAndKeyfob</string>
    </SelectorList>
    <Section>-1</Section>
    <Tab>-1</Tab>
    <Row>-1</Row>
    <Column>-1</Column>
  </AccountParameterInfo>
 </ArrayOfAccountParameterInfo>

架构如下:

<?xml version="1.0"?>
<xsi:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema" 
attributeFormDefault="unqualified" elementFormDefault="unqualified">
<xsi:element name="ArrayOfAccountParameterInfo">
    <xsi:complexType>
        <xsi:sequence>
            <xsi:element name="AccountParameterInfo" maxOccurs="unbounded">
                <xsi:complexType>
                    <xsi:sequence>
                        <xsi:element name="Name" type="xsi:string"/>
                        <xsi:element name="Identifier" type="xsi:integer"/>
                        <xsi:element name="Type" type="xsi:integer"/>
                        <xsi:element name="Length" type="xsi:integer"/>
                        <xsi:element name="Order" type="xsi:integer"/>
                        <xsi:element name="MinValue" type="xsi:string"/>
                        <xsi:element name="MaxValue" type="xsi:string"/>
                        <xsi:element name="Default" type="xsi:string"/>
                        <xsi:element name="CodePage" type="xsi:string"/>
                        <xsi:element name="SelectorList" minOccurs="0"/>
                            <xsi:complexType>
                                <xsi:sequence>
                                    <xsi:element name="string" type="xsi:string"/> 
                                </xsi:sequence>
                            </xsi:complexType>
                        <xsi:element name="Section" type="xsi:integer"/>
                        <xsi:element name="Tab" type="xsi:integer"/>
                        <xsi:element name="Row" type="xsi:integer"/>
                        <xsi:element name="Column" type="xsi:integer"/>
                    </xsi:sequence>
                </xsi:complexType>
            </xsi:element>
        </xsi:sequence>
    </xsi:complexType>
</xsi:element>
</xsi:schema>

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的XSD格式不正确。尽管有缩进,SelectorList的声明是错误的:

                    <xsi:element name="SelectorList" minOccurs="0"/>
                        <xsi:complexType>

应该是

                    <xsi:element name="SelectorList" minOccurs="0">
                        <xsi:complexType>

string也应该被允许重复(maxOccurs="unbounded")。

另请注意:您不应将xsi用于http://www.w3.org/2001/XMLSchema。按照惯例,请改用xsxsd; xsi通常用于http://www.w3.org/2001/XMLSchema-instance

以下是您更正的XSD:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
            attributeFormDefault="unqualified" elementFormDefault="unqualified">
  <xs:element name="ArrayOfAccountParameterInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="AccountParameterInfo" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" type="xs:string"/>
              <xs:element name="Identifier" type="xs:integer"/>
              <xs:element name="Type" type="xs:integer"/>
              <xs:element name="Length" type="xs:integer"/>
              <xs:element name="Order" type="xs:integer"/>
              <xs:element name="MinValue" type="xs:string"/>
              <xs:element name="MaxValue" type="xs:string"/>
              <xs:element name="Default" type="xs:string"/>
              <xs:element name="CodePage" type="xs:string"/>
              <xs:element name="SelectorList" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="string" maxOccurs="unbounded"
                                type="xs:string"/> 
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Section" type="xs:integer"/>
              <xs:element name="Tab" type="xs:integer"/>
              <xs:element name="Row" type="xs:integer"/>
              <xs:element name="Column" type="xs:integer"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

它将成功验证您的XML。