Xml xsd-序列与选择
我对XML模式序列感到困惑 根据w3schools.com,Xml xsd-序列与选择,xml,xsd,Xml,Xsd,我对XML模式序列感到困惑 根据w3schools.com, 序列元素指定子元素必须按顺序出现。每个子元素可以从0到任意次数出现。 如果每个元素必须出现,它怎么会出现0次?这难道不会打破必须出现的规则吗 还有一件事,它们之间的区别是什么 <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="choiceA" type="xs:string" > <xs:element name=
序列元素指定子元素必须按顺序出现。每个子元素可以从
0
到任意次数出现。
如果每个元素必须出现,它怎么会出现0次?这难道不会打破必须出现的规则吗
还有一件事,它们之间的区别是什么
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="choiceA" type="xs:string" >
<xs:element name="choiceB" type="xs:string" />
</xs:choice>
这是:
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="choiceA" type="xs:string" >
<xs:element name="choiceB" type="xs:string" />
</xs:sequence>
你不能为这两种情况下的每一个元素加上任何数量吗?有什么区别吗?序列中的元素必须按照架构中指定的顺序出现。但是,如果元素是用minOccurs=“0”定义的,则它不必出现 这里有一个类似于w3schools.com教程的示例。我刚刚将minOccurs=“0”添加到firstname元素中
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string" minOccurs="0"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
在这种情况下,基于此定义的有效xml元素将是
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
约翰
史密斯
或者删除firstname元素,因为它具有minOccurs=“0”
史密斯
但是,不能混合元素的顺序。所以这是无效的
<employee>
<lastname>Smith</lastname>
<firstname>John</firstname>
</employee>
史密斯
约翰
至于选择和顺序之间的区别。choice元素只允许其中一个元素出现。因此,可以选择choiceA或choiceB,但不能同时选择两者。尽管序列的定义方式不同,但每个序列元素都有一个choiceA和一个choiceB。不幸的是,还有另一种使用选择的方式——在0到无界的情况下,可能有多个相同类型的元素,也可能没有 例如:
<xs:element name="module">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element ref="active"/>
<xs:element ref="debug"/>
<xs:element name="name">
</xs:choice>
</xs:complexType>
</xs:element>
将接受以下XML格式:
<samba>
<active>off</active>
<name>Box</name>
</samba>
关
盒子
并将接受以下两种XML:
<samba>
<debug>off</debug>
<active>off</active>
<debug>off</debug>
<name>Box</name>
<debug>off</debug>
</samba>
关
关
关
盒子
关
谢谢,这非常有帮助。但是,如果为一个选项设置maxOccurse=“unbounded”,那么每个元素的数量就不能满足您的需要吗?根据定义的选项:您仍然只能有choiceA或choiceB,但可以有任意数量的choosen元素。
<samba>
<debug>off</debug>
<active>off</active>
<debug>off</debug>
<name>Box</name>
<debug>off</debug>
</samba>