【问题标题】:Compare two xml files and display difference比较两个xml文件并显示差异
【发布时间】:2015-08-10 20:04:48
【问题描述】:

我正在尝试比较两个 xml 文件并显示差异(如果发现)。

目前我正在使用XML Diff 来寻找差异。

使用方法

 private bool CheckDifferences(string originalFile, string newFile, ref string difference)
    {
       var diff = new XmlDiff
       {
           IgnoreComments = true,
           IgnorePI = true,
           IgnoreWhitespace = true,
           Algorithm = XmlDiffAlgorithm.Precise
       };

        var sw = new StringWriter();
        var writer = new XmlTextWriter(sw);
        writer.Formatting = Formatting.Indented;

        var originalReader = new XmlTextReader(new StringReader(originalFile));
        var modifiedReader = new XmlTextReader(new StringReader(newFile));
        var status = diff.Compare(originalReader, modifiedReader, writer);

        difference = sw.ToString();
        writer.Close();
        originalReader.Close();
        modifiedReader.Close();

        return status;
    }

difference 将只包含更改,而不是确切更改的内容。

例如,我想要实现的是

xml1 - 原始文件

<catalog>
   <book id="bk11">
      <author>AuthorName1</author>
   </book>
</catalog> 

xml2 - 新文件

<catalog>
   <book id="bk11">
      <author>AuthorName2</author>
   </book>
</catalog> 

所以我想显示作者已更改为 AuthorName2 等...

xml 文件结构未知,但两个文件的结构相同。

还查看了XNode.DeepEquals,但它也返回是否有任何区别。但没有什么区别。

感谢任何帮助

【问题讨论】:

  • 请举例说明差异包含什么,以及您希望它包含什么。
  • @Polyfun:正如我在问题中提到的,对于我提供的示例 xml,我想显示作者更改为 ->AuthorName2
  • 我假设他们会有一个 id。为什么不直接阅读 XML 并进行比较。
  • Notepad++,例如有一个插件可以让你比较两个文件。既然有这么多工具已经可以做到这一点,为什么还要开发呢?
  • @Fjodr:这不仅仅是比较两个文件。一个来自网络服务,另一个来自不同的来源。这是供最终用户验证和检查差异的。不然网上工具那么多!!!

标签: c# .net xml


【解决方案1】:

Compare 方法仅返回truefalse,但通过查看文档,差异将作为 XML 文档写入 diffgram writer(用于 XML Patch)。因此,您始终可以解释该文档并显示您想要的更改。

【讨论】:

  • 是的,它确实创建了一个 xml,但内容看起来像 &lt;xd:change match=\"1\"&gt;AuthorName2&lt;/xd:change&gt;
  • 这不是全部,我相信。但你是对的,这种格式是为 XML Patch 设计的,不容易理解。尽管如此,它仍然包含显示您想要的信息所需的信息,即“作者已更改为 AuthorName2”。
  • 会有大量信息,但问题是通过查看结果如何识别AuthorName2与节点&lt;author&gt;相关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2017-06-06
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
相关资源
最近更新 更多