C# 验证两个XML模式的兼容性

C# 验证两个XML模式的兼容性,c#,xml,f#,xsd,C#,Xml,F#,Xsd,是否有.NET调用来验证一个XML架构是否与另一个向后兼容?否。您必须使用XmlSchema类来解析这两个架构,然后编写进行比较的代码 XML比较/差异无法解决这一问题,因为两个XSD甚至可以完全相同,并且具有非常不同的XML表示形式—例如: <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.or

是否有.NET调用来验证一个XML架构是否与另一个向后兼容?

否。您必须使用
XmlSchema
类来解析这两个架构,然后编写进行比较的代码

XML比较/差异无法解决这一问题,因为两个XSD甚至可以完全相同,并且具有非常不同的XML表示形式—例如:

<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/XMLSchema.xsd"
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="test">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="str" type="xs:string"/>
      </xs:sequence>
      <xs:attribute name="num" type="xs:int"/>
    </xs:complexType>
  </xs:element>

</xs:schema>



这是否意味着模式之间存在超集/子集关系?…如果是这样,API可能会提供您可以分析以确定的输出。我相信这意味着超集关系,是的。但从那篇文章到库本身的链接已断开()。安装程序的下载链接位于文章顶部。看起来像是
XmlDiff的重载。比较
使用
diffgramWriter
arg可能会执行您想要的操作。
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/XMLSchema.xsd"
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="test" type="test">
  </xs:element>

  <xs:complexType name="test">
    <xs:sequence>
      <xs:element name="str" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="num" type="xs:int"/>
  </xs:complexType>

</xs:schema>