我有一段代码正在尝试检查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>


避免订购问题?

10-02 09:43