来自可变数量的XML元素的XSD

时间:2012-10-17 07:48:22

标签: xml xsd xsd.exe xsd-validation

我根据应用中的某些条件创建了一个xml文档。我的xml中的元素数量总是可变的。 例如,有一次看起来像:

<TransactionTypes>
  <X value="false" text="" />
  <O value="false" text="" />
  <E value="false" text="" />
  <P value="false" text="" />
  <C value="false" text="" />
  <K value="false" text="" />
</TransactionTypes>

,另一次像:

 <TransactionTypes>
  <TT value="false" text="" />
  <EP value="false" text="" />
  <PY value="false" text="" />
</TransactionTypes>

因此,TransactionTypes中的子元素总是在元素名称方面有所不同,但它们始终具有值和文本属性。 我怎样才能为此制作XSD?

2 个答案:

答案 0 :(得分:0)

我认为您不能在通配符上构建XSD限制,然后仍然指定通配符元素的属性。

唯一可能的标签可能是“any”: http://www.w3schools.com/schema/schema_complex_any.asp

无法定义“any”可能具有的属性。 我不认为还有另一种解决方案。 正如你所说“可以有任何一种元素”...... 如果您可以定义所有可能的“TransactionTypes”子元素,那么您肯定会做得更好。无论有多少。您可以将所有这些子元素映射到相同的complexType,然后仅定义属性值/文本一次。 但是通配符不起作用。

塞巴斯蒂安

答案 1 :(得分:0)

在XSD 1.1中,您可以在TransactionTypes元素上定义一个断言:

<xs:assertion test="every $c in * satisfies @value='false' and @text=''"/>

然而,值得指出的是,XSD并不是为了让您能够对XML表达任意约束,而是为了描述您在XSD设计者认为是精心设计的XML中所发现的约束类型;而且这个XML似乎不属于该类别。