如何在<xs:all>中创建可选项?</xs:all>

时间:2011-04-15 13:02:33

标签: xsd

我有这样的xsd。这些所有字段都可以存在或不存在,并且不可预测。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="request">
<xs:complexType>
  <xs:all  minOccurs="0">
    <xs:element ref="field1"/>
    <xs:element ref="field2"/>
    <xs:element ref="field3"/>
    <xs:element ref="field4"/>
    <xs:element ref="field5"/>
  </xs:all>
</xs:complexType>
</xs:element>

</xs:schema>

field4在xml中不存在,验证器说他正在等待field4,但他不应该这样说。那有什么不对?

w3cschools.com

<xs:element name="person">
<xs:complexType>
<xs:all minOccurs="0">
  <xs:element name="firstname" type="xs:string"/>
  <xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>

上面的例子表明“firstname”和“lastname”元素可以按任何顺序出现,每个元素可以出现零次或一次!

2 个答案:

答案 0 :(得分:16)

您需要将minOccurs放在单个元素上,而不是<xs:all>上,即

<xs:all>
    <xs:element ref="field1" minOccurs="0"/>
    <xs:element ref="field2" minOccurs="0"/>
    <xs:element ref="field3" minOccurs="0"/>
    <xs:element ref="field4" minOccurs="0"/>
    <xs:element ref="field5" minOccurs="0"/>
</xs:all>

minOccurs="0"放在<xs:all>上表示可以省略整个组,而不是单个元素。

请参阅XML Schema docs

答案 1 :(得分:3)

在所有

中尝试这样
 <xs:element ref="field4" minOccurs="0" >