我试图用C#代码比较两个Xml文件.
我想忽略Xml语法差异(即前缀名).
为此我正在使用微软的 XML Diff and Patch C#API.
它适用于某些Xml,但我找不到一种方法来配置它与以下两个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在语义上相同(或同构)?
>可以将Microsoft的XML Diff和Patch API配置为支持吗?
>有没有其他C#实用程序?
文件是同构的,可以由下面的程序显示.我想如果你使用XmlDiffOptions.IgnoreNamespaces和XmlDiffOptions.IgnorePrefixes来配置Microsoft.XmlDiffPatch.XmlDiff,你会得到你想要的结果.
原文链接:https://www.f2er.com/xml/292883.htmlusing 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); } } } }