Ram
Ram

Reputation: 21

Error: s4s-elt-must-match.1: The content of 'sequence' must match

I am getting the following error when I try to validate my XML against my XSD:

[Error] try.xsd:20:46: s4s-elt-must-match.1: The content of 'sequence' must match (annotation?, (element | group | choice | sequence | any)*). A problem was found starting at: complexType.

My XML is as follows:

<?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>

The schema is as follows:

<?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>

What am I doing wrong?

Upvotes: 1

Views: 9170

Answers (1)

kjhughes
kjhughes

Reputation: 111620

Your XSD is malformed. The declaration for SelectorList, despite indentation, is wrong:

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

should be

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

string should also be allowed to repeat (maxOccurs="unbounded").

Note also: You shouldn't use xsi for http://www.w3.org/2001/XMLSchema. By convention, use xs or xsd instead; xsi is typically used for http://www.w3.org/2001/XMLSchema-instance.

Here is your corrected 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>

It will validate your XML successfully.

Upvotes: 1

Related Questions