我有两个Xml文件,我将调用第一个Input Xml
和第二个Template Xml
。 Template Xml
是一个静态Xml,我想验证Template Xml
是否是Input Xml
的子集。我如何在C#中实现这一点?如何验证一个xml是否是C#中另一个子集的子集
子集我的意思是我想验证Template Xml
中提到的Xml标记和属性是否存在于具有相同值的Input Xml
中。
我有两个Xml文件,我将调用第一个Input Xml
和第二个Template Xml
。 Template Xml
是一个静态Xml,我想验证Template Xml
是否是Input Xml
的子集。我如何在C#中实现这一点?如何验证一个xml是否是C#中另一个子集的子集
子集我的意思是我想验证Template Xml
中提到的Xml标记和属性是否存在于具有相同值的Input Xml
中。
使用xpath查询两个XML文件并比较它们的值。
你可以找到参考XPATH以下链接:http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm
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)。实施类似的东西,你可以扩展这一检查属性为好。
我会reccommed使用XML架构文件(XSD),除非您没有选择。请参阅:http://en.wikipedia.org/wiki/XML_schema – MadcoreTom
我想确保具有特定值的特定标签和属性存在,但不在意另外,XML中已经有了一个我无法修改的XSD,也许我错过了一些东西,你能否详细说明我该如何使用XSD – Rishabh