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

时间:2017-10-25 10:55:29

标签: c# xml xsd

我有一段代码试图检查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似乎有很少的选项(一个 - 只适用于类型) - 有没有一种方法可以说服它只检查节点是否是有效选项之一,而不是强制执行序列?

1 个答案:

答案 0 :(得分:3)

你能否使用

schema.Occurrence = XmlSchemaInference.InferenceOption.Relaxed;

将XML重新定义为

<A>
  <B />  <!-- optional -->
  <C />  <!-- optional -->
  <D />  <!-- optional -->
  <C />  <!-- optional -->
  <B />  <!-- optional -->
</A>

避免订购问题?