19

我正在尝试使 var1 中的变量无序列表出现两次,而 var2 出现无限次(我的项目中的用例不同)。该元素不允许我使用 maxOccurs。

我正在尝试做的事情有什么解决方法吗?

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="testcomment">
    <xs:complexType>
      <xs:all>
        <xs:element name="var1" type="xs:string" maxOccurs="2" />
        <xs:element name="var2" type="xs:integer" maxOccurs="unbounded" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>
4

3 回答 3

17

我遇到了同样的问题,并且有解决方案!看看这个答案:

https://stackoverflow.com/a/3827606/637142

<xs:element name="A">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="B"/>
      <xs:element ref="C"/>
    </xs:choice>
  </xs:complexType>
</xs:element>
于 2013-05-10T15:14:14.457 回答
7

简单,只需使用<xs:choice maxOccurs="unbounded">而不是<xs:all>. 这将给出您正在寻找的效果。

于 2014-03-01T02:05:39.537 回答
2

您尝试执行的操作听起来像是列表中元素的类型在没有预读的情况下可能是模棱两可的,在这种情况下,由于它可以描述的语言类,XSD 中没有解决方法。

您可以发布 XSD 的相关部分吗?


更新:不,你不能用 XSD 做到这一点。<xs:all>例如,此处列出了有关您可以放入元素中的内容的规则。此约束有一个名称 - UPA 或唯一粒子属性约束。这完全与歧义有关,Microsoft 网站很好地解释了为什么存在此处

您可以更改文档布局以消除对此类声明的需求,或者寻找更具表现力的模式语言,例如RelaxNG

于 2010-03-02T10:18:45.820 回答