Probleme beim Definieren einer Liste von Elementen in einer XSD -Datei, wenn Elemente wiederholt werden

StackOverflow https://stackoverflow.com/questions/6347365

  •  27-10-2019
  •  | 
  •  

Frage

Ich versuche eine XSD -Datei zu schreiben, um meine XML zu validieren. Hier ist eine Probe des XML

<Record xmlns="http://example.com/FixedBinaryFile.xsd" Name="Clients">
  <Padding Size="5">
  <RecordEntry Name="Foo1" DataType ="Char"/>
  <RecordEntry Name="Foo2" DataType="AnsiString" MaxSize="8"/>
  <RecordEntry Name="Foo3" DataType="AnsiString" MaxSize="25"/> 
  <Padding Size="2"/> 
  <RecordEntry Name="Foo4" DataType="Byte"/>
  <Padding Size="1"/> 
  <RecordEntry Name="Foo5" DataType="UInt16"/>
  <RecordEntry Name="Foo6" DataType="AnsiString" MaxSize="3"/>
  <RecordEntry Name="Foo7" DataType="AnsiString" MaxSize ="3"/>
  <Padding Size="22"/>
</Record>

Und hier ist die XSD, die es definiert

  <xs:element name="Record">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="RecordEntry" type="RecordEntry" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element name="Padding" type ="PaddingEntry" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="Name" type="xs:string" use ="required"/>
    </xs:complexType>
  </xs:element>

Mein Problem ist sequence erlaubt mir nicht, Polstereinträge zu setzen, wo immer ich will (im Moment kann ich so viele haben RecordEntry Einträge, wie ich es will, gefolgt von so vielen Padding Einträge, wie ich will).

Mein Initalgedenken war zu verwenden all anstelle von Sequenz. Ich werde mich jedoch nicht benutzen lassen all mit maxOccurs

Was muss ich tun, um meine Liste richtig zu definieren?

EDIT: Freek hatte es richtig, hier ist, was ich es ändern musste, um es zum Laufen zu bringen.

  <xs:element name="Record">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element name="Padding" type ="PaddingEntry" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="RecordEntry" type="RecordEntry" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="Name" type="xs:string" use ="required"/>
    </xs:complexType>
  </xs:element>
War es hilfreich?

Lösung

Sie können auch Minoccurs und Maxoccurs auf der XS: Sequenz einstellen und festlegen, dass angemessene Werte (wahrscheinlich minoccurs = "0" maxoccurs = "unbegrenzt") Ihr Problem lösen sollten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top