当前位置: 首页 > 面试题库 >

C#中的XML比较

朱俭
2023-03-14
问题内容

我正在尝试使用C#代码比较两个Xml文件。我想忽略Xml语法差异(即前缀名称)。为此,我使用了Microsoft的XML Diff和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>

我的问题是:

  1. 我对这两个xml在语义上相等(或同构)是否正确?
  2. 可以配置Microsoft的XML Diff和Patch API来支持它吗?
  3. 还有其他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);
            }
        }
    }
}


 类似资料:
  • 问题内容: 我一直在寻找一套在JSON和XML之间进行转换的例程,但毫无用处。我在Javascript,Java,PHP和Python中找到了这样的例程,但在C或C ++中却找不到。 FWIW,我的json库是json- spirit。我当前正在处理JSON,并希望通过转换层添加XML支持(将传入消息从XML转换为JSON,对其进行处理,将结果转换回XML,然后将其输出)。 有人有指针吗? 我还看

  • 问题内容: 我想知道哪个更快:XML和JSON?什么时候使用哪一个? 问题答案: 在回答何时使用哪一个之前,有一点背景知识: 编辑:我应该提到,这种比较实际上是从在具有JavaScript的浏览器中使用它们的角度来看的。这也不数据格式的方法 有 被使用,并且有很多很好的解析器,这将改变细节,使我在说什么不是很有效的。 JSON既更紧凑,又(在我看来)更具可读性-在传输中,仅因为传输的数据较少,它就

  • 此代码给出输出ELSE 此代码给出的输出是: 虽然两个程序看起来都一样,但为什么输出有差异呢?为什么会这样?

  • 本文向大家介绍C#中的Linq to Xml详解,包括了C#中的Linq to Xml详解的使用技巧和注意事项,需要的朋友参考一下 前言 我相信很多从事.NET开发的,在.NET 3.5之前操作XML会比较麻烦,但是在此之后出现了Linq to Xml,而今天的主人公就是Linq to Xml,废话不多说,直接进入主题。 一、生成Xml 为了能够在结构有一定的组织,笔者建议大家新建一个控制台项目,

  • 问题内容: 基于另一个SO问题,如何检查两个格式正确的XML代码片段在语义上是否相等。我需要的只是“相等”与否,因为我正在将此用于单元测试。 在我想要的系统中,它们是相等的(请注意“开始”和“结束”的顺序): 我可以使用lmxl和其他工具,并且一个仅允许对属性进行重新排序的简单函数也可以正常工作! 基于IanB答案的工作片段: 问题答案: 您可以使用formencode.doctest_xml_c