C# 如何在C中验证一个xml是否是另一个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
的子集。如何在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吗