Xml比较在C#
发布时间:2020-12-16 07:55:04 所属栏目:百科 来源:网络整理
导读:我试图用C#代码比较两个Xml文件. 我想忽略Xml语法差异(即前缀名). 为此我正在使用微软的 XML Diff and Patch C#API. 它适用于某些Xml,但我找不到一种方法来配置它与以下两个Xml的工作: XML A: root xmlns:ns="http://myNs" ns:child1/ns:child/root XML B
我试图用C#代码比较两个Xml文件.
我想忽略Xml语法差异(即前缀名). 为此我正在使用微软的 XML Diff and Patch C#API. 它适用于某些Xml,但我找不到一种方法来配置它与以下两个Xml的工作: XML A: <root xmlns:ns="http://myNs"> <ns:child>1</ns:child> </root> XML B: <root> <child xmlns="http://myNs">1</child> </root> 我的问题是: 我是对的,这两个xml在语义上相同(或同构)?
文件是同构的,可以由下面的程序显示.我想如果你使用XmlDiffOptions.IgnoreNamespaces和XmlDiffOptions.IgnorePrefixes来配置Microsoft.XmlDiffPatch.XmlDiff,你会得到你想要的结果.
using System.Linq; using System.Xml.Linq; namespace SO_794331 { class Program { static void Main(string[] args) { var docA = XDocument.Parse( @"<root xmlns:ns=""http://myNs""><ns:child>1</ns:child></root>"); var docB = XDocument.Parse( @"<root><child xmlns=""http://myNs"">1</child></root>"); var rootNameA = docA.Root.Name; var rootNameB = docB.Root.Name; var equalRootNames = rootNameB.Equals(rootNameA); var descendantsA = docA.Root.Descendants(); var descendantsB = docB.Root.Descendants(); for (int i = 0; i < descendantsA.Count(); i++) { var descendantA = descendantsA.ElementAt(i); var descendantB = descendantsB.ElementAt(i); var equalChildNames = descendantA.Name.Equals(descendantB.Name); var valueA = descendantA.Value; var valueB = descendantB.Value; var equalValues = valueA.Equals(valueB); } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |