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

时间:2011-08-11 07:09:20

标签: c# xml

我有两个Xml文件,我将调用第一个Input Xml,第二个Template XmlTemplate Xml是静态Xml,我想验证Template Xml是否是Input Xml的子集。我如何在C#中实现这一目标?

按子集我的意思是我想验证Template Xml中提到的Xml标记和属性是否在Input Xml中具有相同的值。

2 个答案:

答案 0 :(得分:0)

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

您可以在以下链接中找到对xpath的引用:http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm

答案 1 :(得分:0)

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)。实现类似的东西。你可以扩展它以检查属性。