Xml XSD Schema:MaxOccurs位于xs:all下的引用元素上
问题是我使用XS:all是因为元素可以是任何顺序。我无法在引用的元素上放置maxoccurs:Xml XSD Schema:MaxOccurs位于xs:all下的引用元素上,xml,xsd,xsd-validation,Xml,Xsd,Xsd Validation,问题是我使用XS:all是因为元素可以是任何顺序。我无法在引用的元素上放置maxoccurs: <xs:element name="PersonInfo"> <xs:complexType> <xs:all> <xs:element name="Addr" type="AdressType" minOccurs="0" maxOccurs="unbounded" /> <
<xs:element name="PersonInfo">
<xs:complexType>
<xs:all>
<xs:element name="Addr" type="AdressType" minOccurs="0" maxOccurs="unbounded" />
</xs:all>
<xs:attribute name="id" type="xs:ID" use="optional" />
<xs:attribute name="Test" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
<xs:complexType name="AdressType">
<xs:all>
<xs:element name="BuildingAptNumber" type="xs:string" minOccurs="0" />
<xs:element name="Addr1" type="xs:string" minOccurs="0" />
<xs:element name="City" type="xs:string" minOccurs="0" />
<xs:element name="StateProvCd" type="xs:string" minOccurs="0" />
<xs:element name="PostalCode" type="xs:string" minOccurs="0" />
</xs:all>
<xs:attribute name="AddrTypeCd" type="xs:string" use="optional" />
</xs:complexType>
如果元素没有被引用,我就可以不用使用ComplexType了。有没有办法引用元素并在xs:all下使用maxoccurs
编辑:添加maxoccurs的唯一方法是使用complextype并在complextype中定义xs:choice:
<xs:element name="Test" minOccurs="0">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Addr" type="PMICADDRESS"/>
</xs:choice>
</xs:complexType>
</xs:element>
所以问题是我不知道如何声明addr元素的复杂类型。我找到的一个解决方案是更改为XSD1.1。我无法更新到XSD1.1。然而我发现了一条有帮助的线索:
如果这个元素没有被引用,我就可以侥幸逃脱
使用ComplexType
否,您仍然不能在xs:all
下的xs:element
上使用maxOccurs=“unbounded”
是否有任何方法引用元素并使maxoccurs处于
xs:全部
否,xs:all
下的xs:element
只能是0或1
评论中关于xs:choice想法的更新: 我可以使用
xs:choice
创建元素而不是引用
现有的一个(不理想,因为参考使用了多个点)。我是
试图找出是否有方法使用对
元素具有xs:choice
如果您的首要任务是避免排序,并且仍然允许在PersonInfo
下有多个Addr
元素,那么可以使用xs:choice
和maxOccurs=“unbounded”
:
但是,请注意,与使用
xs:all
不同,此处可以省略Addr
或e1
或e2
。在此特定配置中,e1
和e2
也可以重复出现。如果希望探索其他组合,请参阅xsd:choice
及其xsd:element
子项上的maxOccurs
如何解释。最后,您可以将xs:all
元素分隔在一组有序元素之前或之后,您可以允许基数大于1。XSD 1.1中删除了对xs:all的maxOccurs=“1”限制。您可以选择使用XSD1.1处理器吗?据我所知,目前有三种:撒克逊、薛西斯和阿尔托瓦。MSDN说," . 我也得到了一个错误。我正在使用visual studio和C#code进行XSD验证。您的MSDN引用适用于xs:all
元素本身,而不是它的xs:element
子元素,正如我所述,它们的maxOccurs
值可能为0或1。(旁白:关于XML标准的讨论,请引用W3C,而不是MSDN。)更重要的是,unbounded
不能用作xs:all
下xs:element
上的maxOccurs
的值。希望这有帮助。谢谢,我理解你的意思,XS:element嵌套在XS:all中。错误发生在xs:element上。使用xs;sequence会解决这个问题,但是元素可以以任何顺序出现(这就是我使用xs:all的原因)。我知道不能在xs:all下的xs:element上使用maxOccurs(这篇文章的首要原因)。我在寻找另一种选择。我可以使用xs:choice创建元素,而不是引用现有的元素(不理想,因为引用使用了多个点)。我正在试图找出是否有一种方法可以使用xs:choice引用元素我已经为您更新了答案,以解决使用xs:choice
的可能性。感谢您的更新,不幸的是,如果不使用复杂类型,我无法在xs:all下使用xs:choice。更新了我的问题,并举例说明问题的原因。谢谢Michael。我正在调查。
<xs:choice maxOccurs="unbounded">
<xs:element name="Addr" type="AdressType"/>
<xs:element name="e1"/>
<xs:element name="e2"/>
</xs:choice>