加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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在语义上相同(或同构)?
>可以将Microsoft的XML Diff和Patch API配置为支持吗?
>有没有其他C#实用程序?

文件是同构的,可以由下面的程序显示.我想如果你使用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);
            }
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读