在xsd模式中定义元素列表

die*_*rre 4 xsd

模式的这一部分给我带来麻烦:

        <xs:element name="newrecipients">
            <xs:complexType>
                <xs:choice>
                    <xs:element name="csv" type="xs:string" />
                    <!-- List of recipients -->
                </xs:choice>
            </xs:complexType>
        </xs:element>
Run Code Online (Sandbox Code Playgroud)

收件人列表是诸如以下内容的列表:

<recipient>
    <field1>...</field1>
    ...
    <fieldN>...</field>
</recipient>
Run Code Online (Sandbox Code Playgroud)

标签接收者可以包含模式未知的标签的随机序列。所以我用了类似

  <xs:element name="recipient">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
Run Code Online (Sandbox Code Playgroud)

问题是我不怎么定义收件人列表。我知道,<xs:list>但在这种情况下我不明白如何使用它,因为通常我会看到类似

<xs:element name="intvalues" type="valuelist">

<xs:simpleType name="valuelist">
  <xs:list itemType="xs:integer"/>
</xs:simpleType>

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

您必须在其中定义包含列表的元素。我要直接csv或直接list

我想念什么?谢谢。

编辑:输出示例

这个:

<newrecipients>
    <csv>myrecipients.csv</csv>
</newrecipients>
Run Code Online (Sandbox Code Playgroud)

或这个:

<newrecipients>
    <recipient>
        <field1>...</field1>
        ...
        <fieldN>...</field>
    </recipient>
    ...
    <recipient>
        <field1>...</field1>
        ...
        <fieldN>...</field>
    </recipient>
</newrecipients>
Run Code Online (Sandbox Code Playgroud)

小智 5

我不确定在xsd:choice元素内部是否有效:

<xs:element name="newrecipients">
    <xs:complexType>
        <xs:choice>
            <xs:element name="csv" type="xs:string" />
            <!-- List of recipients -->
            <xs:element name="recipient" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:any minOccurs="1"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:choice>
    </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用此解决方案将xsd:sequence标签中的元素声明包装起来,但是当csv元素丢失时,我不知道您是否希望列表存在。