2011-08-11 41 views
0

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

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

+1

我会reccommed使用XML架构文件(XSD),除非您没有选择。请参阅:http://en.wikipedia.org/wiki/XML_schema – MadcoreTom

+0

我想确保具有特定值的特定标签和属性存在,但不在意另外,XML中已经有了一个我无法修改的XSD,也许我错过了一些东西,你能否详细说明我该如何使用XSD – Rishabh

回答

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)。实施类似的东西,你可以扩展这一检查属性为好。

相关问题