我有一段代码试图检查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似乎有很少的选项(一个 - 只适用于类型) - 有没有一种方法可以说服它只检查节点是否是有效选项之一,而不是强制执行序列?
答案 0 :(得分:3)
你能否使用
schema.Occurrence = XmlSchemaInference.InferenceOption.Relaxed;
将XML重新定义为
<A>
<B /> <!-- optional -->
<C /> <!-- optional -->
<D /> <!-- optional -->
<C /> <!-- optional -->
<B /> <!-- optional -->
</A>
避免订购问题?