0

我正在根据我的应用程序中的某些条件创建一个 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 中的子元素总是在元素名称方面有所不同,但它们始终具有 value 和 text 属性。我怎样才能为此制作XSD?

4

2 回答 2

0

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

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

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

于 2012-10-17T23:03:08.213 回答
0

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

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

并且无法定义“任何”可能具有的属性。我认为没有其他解决方案。正如您所说的“可以有任何类型的元素”......如果您可以定义所有可能的“TransactionTypes”子元素,您肯定会做得更好。不管有多少。您可以将所有这些子元素映射到相同的 complexType 并定义属性值/文本,然后只需要一次。但是通配符不起作用。

塞巴斯蒂安

于 2012-10-17T08:32:09.327 回答