【问题标题】:Compare XML files to determine differences比较 XML 文件以确定差异
【发布时间】:2020-02-03 15:43:49
【问题描述】:

我一直在环顾四周,虽然有几个选择,但没有一个真正适合我目前的问题。

我得到两个 XML 文件,File1 和 File2,它们具有“用户”节点,子节点详细说明姓名、年龄、地址等内容。从那里我需要创建第三个 XML File3,它专门包含在之间发生变化的字段两者同时保留“名称”节点以识别更改是由该用户完成的。

如果我得到:

File 1:
<users>
 <user>
  <name>Marco</name>
  <height>1,76</height>
  <address>C:/ Far-away 34</address>
  <mail>marco@marco</mail>
 </user>
</users>

File 2:
<users>
 <user>
  <name>Marco</name>
  <height>1,80</height>
  <address>C:/ Far-away 34</address>
  <mail></mail>
 </user>
</users>

它应该输出一个 XML:

File 3:
<users>
 <user>
  <name>Marco</name>
  <height>1,80</height>
  <mail></mail>
 </user>
</users>

我的主要问题之一是除了“名称”之外,我没有被告知哪些节点将存在(或者它们是否有子节点)。

编辑:用户只出现一次,节点可以按任意顺序排列,节点数量不固定。

【问题讨论】:

  • 您需要定义这需要多么智能。子元素可以按任何顺序排列吗?可以有多个名为 Marco 的用户吗?可以有多个名为“邮件”的子元素吗?等等。如果第二个文件中缺少一个元素,它是如何处理的?
  • 需要更多示例数据才能正确执行此操作。过去做过类似的任务。我同意 Chuck 的观点,只是仅仅回答他的问题通常是不够的。看实际输入更好。

标签: c# xml xml-parsing


【解决方案1】:

您可以使用XElement class

将您的 XML 反序列化为 XElement 对象,然后您可以一一比较子节点。

如果您知道此 XML 中可能出现的所有可能节点,您可以将这些 XML 直接反序列化为 C# 对象。但是使用 XElement 类,您可以实现更通用的解决方案。

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 2015-08-10
    • 2014-06-08
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多