Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#XMLSchemaReference创建XML模式时,如何放松<;xs:sequence>;选项_C#_Xml_Xsd - Fatal编程技术网

使用C#XMLSchemaReference创建XML模式时,如何放松<;xs:sequence>;选项

使用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

我有一段代码试图检查XML片段是否满足XSD模式。例如,XML片段是否:

<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推断出来的,因此我无法对其进行太多控制:-(