我有xml文件:
<Parent>
<Child1 ... />
<Child2 ... />
...
<Child1 ... />
<Child1 ... />
<Parent>
其中Clild1和Child2-父抽象类的子类。
也就是说,问题是:如何为可以具有任意数量不同类型元素的集合设置验证方案?
致以最良好的问候!
<xs:element name="Parent">
<xsl:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Child1"/>
<xs:element name="Child2"/>
</xs:choice>
</xs:complexType>
</xs:element>
为了说明这是如何工作的,让我们使用示例输入的简化版本。
<Parent>
<Child1 ... />
<Child2 ... />
<Child1 ... />
<Child1 ... />
</Parent>
- 验证器查看第一个元素。CCD_ 1是第一个这样验证的元素
- 然后,验证器在父对象内部查找复杂类型。它找到CCD_ 2。由于
<Child1>
是choice
块中的第一个元素,因此它进行验证 - 验证器然后查找
<Child2>
元素。由于<Child2>
是下一个,它也进行了验证 - 验证器然后查看下一个元素。它不是
</Parent>
,因此验证器将其与choice
块进行检查,因为它可以作为maxOccurs=unbounded
出现无限次 - 验证器找到一个
<Parent>
0元素进行验证 - 验证器查找不存在的
<Child2>
元素,从而完成choice
块 - 验证器然后查看下一个元素。它不是
</Parent>
,因此验证器将其与choice
块进行检查,因为它可以作为maxOccurs=unbounded
出现无限次 - 验证器找到一个
<Child1>
元素进行验证 - 验证器然后查看下一个元素。验证的是
</Parent>
- 验证程序已完成。文档验证成功
由于minOccurs=0
,这也允许<Child1>
0或<Child2>
元素出现0
的情况。除非明确声明,否则XML模式元素继承其父元素的属性。在这种情况下,由于我们没有为<Child1>
或<Child2>
声明minOccurs属性,因此这相当于<xs:element minOccurs="0" name="Child1"/>
和<xs:element minOccurs="0" name="Child2"/>
。