【问题标题】:Error: s4s-elt-must-match.1: The content of 'sequence' must match错误:s4s-elt-must-match.1:“序列”的内容必须匹配
【发布时间】:2017-07-03 10:03:06
【问题描述】:

当我尝试根据我的 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>

我做错了什么?

【问题讨论】:

    标签: xml xsd xsd-validation xml-validation


    【解决方案1】:

    您的 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。按照惯例,请改用xsxsdxsi 通常用于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。

    【讨论】:

    • 非常感谢您快速而详尽的回答。我都试过了。
    • 不客气。 我都试过了是否意味着你的问题已经解决了?如果是这样,请accept这个答案。如果不是,请解释。谢谢。
    • 我的意思是我之前已经多次尝试过您的解决方案,但显然有一个错误(斜杠)。是的,它完美地验证了。再次感谢
    • (为了清楚起见,我的回答中指出了 两个 错误和一个公然违反约定的行为。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多