好吧,当然可以!实际上非常简单:如果每个元素的结构相同,则可以定义一个<xs:complexType>
来验证它,然后使用:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="DOC" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DOC">
<xs:complexType>
<xs:sequence>
<xs:element name="DOC_OBL_1" type="DocType" />
<xs:element name="DOC_OBL_2" type="DocType" />
<xs:element name="DOC_OBL_3" type="DocType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="DocType">
<xs:sequence>
<xs:element name="TIP_DOC_OBL" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:schema>
那对你有用吗?它可以满足您的所有需求吗?
正如 Zach 非常正确地指出的那样——这个“解决方案”显然是相当有限的,因为它不能处理任意数量的标签 DOC_OBL_1、DOC_OBL_2、....、DOC_OBL_x——必须知道名称以及标签的数量提前时间。
这是不幸的,但考虑到这个残缺的 XML,这是唯一的解决方案。真正的解决方案是有类似的东西:
<DOC>
<DOC_OBL id="1">
</DOC_OBL>
<DOC_OBL id="2">
</DOC_OBL>
.....
<DOC_OBL id="x">
</DOC_OBL>
</DOC>
然后 XML 模式会变得更加容易,并且可以处理任意数量的<DOC_OBL>
标签。
但是 GIGO 原则适用:Garbage In, Garbage Out ==> 糟糕的 XML 结构进来,只有糟糕的、不完整的验证是可能的。
马克