使用xsd:all定义元素的正确方法

时间:2013-04-29 19:55:02

标签: xml xsd

我是xml的新手,我正在尝试理解xsd:all元素。 正如MSDN所说:

  

xsd:all允许组中的元素以包含元素的任何顺序显示(或不显示)。

所以,据我所知,如果我们做一个简单的xsd架构示例:

  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" >  
    <xsd:element name = "MyElem">
     <xsd:complexType>
            <xsd:all>
            <xsd:element name = "name" type = "xsd:string" />
            <xsd:element name = "lastname" type = "xsd:string" />
            <xsd:element name = "city" type = "xsd:string" />
            </xsd:all>
     </xsd:complexType>
    </xsd:element>
  </xsd:schema>

然后我们可以有一个像这样的xml文件:

<MyElem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Example.xsd" >
    <name>"some_name"</name>
    <lastname>"some_last_name"</lastname>
    <city>"somecity"</city>          
</MyElem>

这很清楚。但是当我尝试给 MyElem 没有元素时,正如定义中提到的那样(允许元素出现或不出现),我在xml文件中出现错误,其中说:

  

此地点预计会有以下元素。

我正在使用Altova xmlSpy xml编辑器。

我是否正确理解元素可能会或可能不会出现在包含元素中?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您想要某些元素是可选的,请给它们minOccurs="0"。要指定名称,姓氏和城市可以按任何顺序出现,而城市是可选的:

<xsd:all>
  <xsd:element name = "name" type = "xsd:string" />
  <xsd:element name = "lastname" type = "xsd:string" />
  <xsd:element name = "city" type = "xsd:string" minOccurs="0"/>
</xsd:all>