XSD - 定义相同元素的不同方法

时间:2014-08-19 10:43:06

标签: xml xsd

我有一大堆类似的程序,大致如此返回xml:

<result>
  <query>
  </query>
  <transaction>
   <revenue>
     ...
   </revenue>
  </transaction>
</result>

查询元素始终具有相同的结构。另一方面,收入元素具有六种结构中的一种,具体取决于具体的程序。虽然它们都包含类似的数据,但由于底层系统(我无法解决这个问题),每个变体都完全不同。这不仅仅是每个属性的一些附加属性,它们完全不同。

我正在尝试制作一个XSD来验证任何程序返回的XML。我有一个XSD用于收入元素的每个变体,但我想将它们合并为一个将验证任何元素。

我尝试过使用:

<xs:choice>
<xs:element name="revenue">
  #variation
</xs:element>
<xs:element name="revenue">
  #Another variation
</xs:element>
<xs:element name="revenue">
  #Another variation
</xs:element">
</xs:choice>

但XSD不喜欢具有相同名称的元素。有没有办法解决这个问题或以其他方式实现我想要做的事情?

1 个答案:

答案 0 :(得分:0)

需要更像这样:

<xs:element name="revenue">
  <xs:complexType>
    <xs:choice>
    #variation
    #Another variation
    #Another variation
    </xs:choice>
  </xs:complexType>
</xs:element>

但由于UPA,它仍然不容易,因为您可能希望该属性与内容模型一样多变。所以细节取决于变化的样子。

如果您为不同类型的收入使用不同的元素名称会更容易,因为在XSD中默认情况下验证规则是元素名称的函数。