【问题标题】:C# Library to compare XML tree structures用于比较 XML 树结构的 C# 库
【发布时间】:2018-01-14 13:05:31
【问题描述】:

我想编写一个 C# 应用程序来比较两个 XML 文件的树结构。 IE。我不关心节点的内容,但前提是两个文件中使用了相同的标签(顺序无关紧要)。

然后我想输出仅在其中一个文件中找到的节点。

是否有可用于此目标的库?我想应该有,因为比较 XML 是一个已经实现很多次的功能。到目前为止,我只发现了看似过时的Microsoft Diff and Patch library,据我所知,它没有提供忽略节点内容的选项。使用似乎已经过时的库也感觉不对。

【问题讨论】:

  • 也许,为您的文档创建一个 XML 模式并根据该模式验证两个文档是一个想法。如果您的用例更通用(成对的不同文档类型),也可能有一种方法可以从两个文档中的一个生成架构,然后根据它验证另一个...
  • @BitTickler 这听起来很有趣,我会试试这个方法!
  • 当你说“看似过时”时,希望你认真测试一下。旧的东西可以完美地工作。
  • 也许XNode.DeepEquals 方法可以帮助你。加载xml到XElement,删除所有内容,然后使用。

标签: c# .net xml diff xmldiff


【解决方案1】:

当您不想比较内容而只关心结构时,让我们摆脱内容!

您可以使用内置的XmlDocument 类将两个 XML 文件加载到内存中,然后从根目录开始,沿着树向下移动并删除所有内容(因为您不关心它)。然后,您可以获取这些增强文件并通过普通文件 diff-library 运行它们(例如 Google-diff-match-patch

【讨论】:

  • 我忘了提到子节点出现的顺序无关紧要(现在编辑)。因此,我很可能还必须手动创建差异。如果没有库已经意识到这一点,我想我会使用这种方法。
  • 嗯,您总是可以按名称对同一级别上的节点进行排序,这应该再次为您提供相同的、对差异友好的结构
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多