【问题标题】:Compare two almost similar xml files and then add tags missing in first xml file比较两个几乎相似的 xml 文件,然后添加第一个 xml 文件中缺少的标签
【发布时间】:2013-08-16 11:24:43
【问题描述】:

我必须将 xml 文件说 abc.xml 和 123.xml 几乎相似,我的意思是具有相同的内容,但是第二个,即 123.xml 比前一个具有更多的内容。我想使用 Java 读取这两个文件,并比较每个标签的 abc.xml 中存在的内容是否与 123.xml 中的相同,如果 123.xml 有一些额外的标签,则将其添加到 abc.xml 中如果 abc.xml 没有标签,则从 123.xml 中删除标签。

我在新旧版本的 xml 中有两个配置文件。在新标签中可以添加或删除,我想使用旧 xml 文件的内容和新 xml 文件的 xml 模式生成 xml 文件。希望我现在有点清楚了。

【问题讨论】:

  • 我无法理解这一点。 123.xml 的标签比 abc.xml 多。如果我在 abc.xml 中缺少标签,则应将其添加到 abc.xml 并从 123.xml 中删除?
  • 我不太清楚你想做什么,但我知道一个非常好的库可以帮助你。查看 XMLUnit xmlunit.sourceforge.net 使用它,您可以轻松比较两个 XML 文档、生成 Diff 对象并评估不同类型的差异。那些你可以随心所欲地处理。
  • 从您目前所写的内容来看,您似乎想要切换文件名。

标签: java xml


【解决方案1】:

这有点模糊。 有很多方法可以做到这一点。特别是当您考虑应该如何进行合并时。一侧总是压倒另一侧吗?这意味着当新文件的内容较少时,也可能会删除标签。

这里有两种处理方法:

  1. 使用在任何版本控制系统中都可以找到的现有内容,例如 diff 和 patch。您可以使用 java 在控制台上运行差异和补丁应用程序。 在这种情况下,你会做一个差异。如果存在差异,请使用 create patch 获取描述更改的补丁文件,然后应用补丁。

  2. 如果您将在 java 中做所有事情,我不会尝试解析文件并对其进行序列化。它会让你发疯。我会使用一种像 JAX-B 这样的编组来转换 Pojo 中的 xml。然后您可以比较 pojo 并在目标 pojo 中添加或删除缺失的元素,然后将其序列化回 xml。

希望这将为您的进一步调查提供一个起点;)

【讨论】:

  • 谢谢。但我想在安卓设备上做。我知道如何根据 xml 文件验证 xml 文件。但是它并没有给我正确的结果,哪些标签被添加,哪些标签被删除。是否有可能验证给我结果应该添加或删除哪些标签?
  • 我不会尝试在 xml 层上执行此操作,将您的 xml 反序列化为 pojos 的表示,您可以轻松地在 xml 中再次进行比较和序列化。这在安卓上也是可能的。我发现 Android 上没有 JAX-B,但看这里应该会有所帮助:ibm.com/developerworks/opensource/library/x-android
猜你喜欢
  • 1970-01-01
  • 2010-12-16
  • 2018-09-04
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多