我有一段代码正在尝试检查XML片段是否满足XSD架构。因此,例如,XML片段是否:
<A>
<C />
</A>
与基于以下内容的完整XML的架构进行比较时:
<A>
<B /> <!-- optional -->
<C /> <!-- optional -->
<D /> <!-- optional -->
</A>
将是100%有效的。
我已经在C#中使用XmlSchemaInference从完整的XML推断架构,它创建了:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element name="B">...</xs:element>
<xs:element name="C">...</xs:element>
<xs:element name="D">...</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
问题是XmlSchemaInference决定“ A”的子代应为xs:sequence-因此它希望所有节点都以正确的顺序存在。 XmlSchemaInference似乎很少有选项(一个-仅针对类型)-是否有办法说服它仅检查节点是否为有效选项之一,而不执行序列?
最佳答案
你不能使用
schema.Occurrence = XmlSchemaInference.InferenceOption.Relaxed;
?
并将XML重新定义为
<A>
<B /> <!-- optional -->
<C /> <!-- optional -->
<D /> <!-- optional -->
<C /> <!-- optional -->
<B /> <!-- optional -->
</A>
避免订购问题?