使用C#XMLSchemaReference创建XML模式时,如何放松<;xs:sequence>;选项
我有一段代码试图检查XML片段是否满足XSD模式。例如,XML片段是否:使用C#XMLSchemaReference创建XML模式时,如何放松<;xs:sequence>;选项,c#,xml,xsd,C#,Xml,Xsd,我有一段代码试图检查XML片段是否满足XSD模式。例如,XML片段是否: <A> <C /> </A> 与基于以下完整XML的架构相比: <A> <B /> <!-- optional --> <C /> <!-- optional --> <D /> <!-- optional --> </A> 将是100%有效 我使用C#中的X
<A>
<C />
</A>
与基于以下完整XML的架构相比:
<A>
<B /> <!-- optional -->
<C /> <!-- optional -->
<D /> <!-- optional -->
</A>
将是100%有效
我使用C#中的XMLSchemaReference从完整的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>
...
...
...
问题是XMLSchemaReference已经决定“A”的子节点应该是xs:sequence,因此它希望所有节点都以正确的顺序出现。XmlSchemaReference似乎很少有选项(只有一个选项,而且只针对类型)——有没有办法说服它只检查节点是否是有效选项之一,而不强制执行序列?您不能使用
schema.Occurrence = XmlSchemaInference.InferenceOption.Relaxed;
?
并将XML重新定义为
<A>
<B /> <!-- optional -->
<C /> <!-- optional -->
<D /> <!-- optional -->
<C /> <!-- optional -->
<B /> <!-- optional -->
</A>
为了避免排序问题?Groan-出于某种原因,我发现了TypeInference选项,但没有出现这个选项。谢谢,@spodger.:-@MikeSadler我们都有呻吟的时候!事实上,仍然存在一个问题——它现在不介意某些元素是否丢失,但它介意那些元素是否按错误的顺序排列。您可以重新定义xml吗?我已将其添加到答案中,因为我似乎无法在此处设置格式。架构是从大型XML推断出来的,因此我无法对其进行太多控制:-(