1

我正在尝试编写一个 xsd 文件来验证我的 xml。这是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>

这是定义它的xsd

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

我的问题是sequence不允许我将填充条目放在我想要的任何地方(现在我可以有尽可能多RecordEntry的条目,然后是我想要的尽可能多的Padding条目)。

我最初的想法是使用all而不是顺序。但是它不会让我all使用maxOccurs

我需要做什么才能正确定义我的列表?

编辑:弗里克说得对,这是我必须改变它以使其工作。

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

1 回答 1

2

您还可以在 xs:sequence 上设置 minOccurs 和 maxOccurs,将其设置为适当的值(可能 minOccurs="0" maxOccurs="unbounded")应该可以解决您的问题。

于 2011-06-14T17:21:22.440 回答