C# 如何在C中验证一个xml是否是另一个xml的子集#

C# 如何在C中验证一个xml是否是另一个xml的子集#,c#,xml,C#,Xml,我有两个Xml文件,我将调用第一个输入Xml,第二个模板Xml。模板Xml是静态Xml,我想验证模板Xml是否是输入Xml的子集。如何在C#中实现这一点 所谓子集,我的意思是要验证模板Xml中提到的Xml标记和属性是否在输入Xml中以相同的值存在。使用xpath查询两个Xml文件并比较它们的值 您可以在以下链接中找到对xpath的引用:Conatains是非常开放的。标签和属性的顺序如何。。。它必须是在相同的顺序和标签深度呢。假设模板中的标记存在于xml中(与深度无关),则只需与之匹配,可以使用

我有两个Xml文件,我将调用第一个
输入Xml
,第二个
模板Xml
模板Xml
是静态Xml,我想验证
模板Xml
是否是
输入Xml
的子集。如何在C#中实现这一点


所谓子集,我的意思是要验证
模板Xml
中提到的Xml标记和属性是否在
输入Xml
中以相同的值存在。

使用xpath查询两个Xml文件并比较它们的值


您可以在以下链接中找到对xpath的引用:

Conatains是非常开放的。标签和属性的顺序如何。。。它必须是在相同的顺序和标签深度呢。假设模板中的标记存在于xml中(与深度无关),则只需与之匹配,可以使用以下扩展方法

    public static bool SupportsTemplate(this XmlDocument xmlDoc, XmlNode template) {
        bool found = true;
        var nodes = template.ChildNodes;
        foreach(XmlNode node in nodes){
            found = xmlDoc.SelectSingleNode("//" + node.Name) == null ? false : true;
            if (!found) break;
            if (node.HasChildNodes)
                found = xmlDoc.SupportsTemplate(node);
            if (!found) break;
        }
        return found;
    }

未测试和未优化的代码(调用xmlDoc.SupportsTemplate(template.DocumentElement)。实现类似的功能。您也可以扩展此功能以检查属性。

我将使用XML架构文件(XSD)重新通信相反,除非您别无选择。请参阅:我希望确保存在具有特定值的特定标记和属性,但不关心其他标记。此外,XML已经有一个XSD,我无法修改。可能我缺少一些东西,您能详细说明如何使用XSD吗