【问题标题】:XSD from variable number of XML elements来自可变数量的 XML 元素的 XSD
【发布时间】:2012-10-07 10:18:33
【问题描述】:

我正在根据我的应用程序中的某些条件创建一个 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?

【问题讨论】:

    标签: xml xsd xsd.exe xsd-validation


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      塞巴斯蒂安

      【讨论】:

        猜你喜欢
        • 2015-12-24
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 2019-02-17
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        相关资源
        最近更新 更多