我有两个Xml文件,我将调用第一个Input Xml
,第二个Template Xml
。 Template Xml
是静态Xml,我想验证Template Xml
是否是Input Xml
的子集。我如何在C#中实现这一目标?
按子集我的意思是我想验证Template Xml
中提到的Xml标记和属性是否在Input Xml
中具有相同的值。
答案 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)。实现类似的东西。你可以扩展它以检查属性。