【问题标题】:vtd xml diff implementationvtd xml差异实现
【发布时间】:2017-06-17 02:46:18
【问题描述】:

对于同一文件的不同版本,我有许多 VTD+XML 索引,我希望实现类似 diff 的方法来返回版本之间已修改的节点的 x 路径,以及文本之间的差异在这些节点内。

我认为使用现有算法(例如 O(nd) difference)最好比较两个节点内的文本。因此,我设想的方法是同时遍历两个文档并存储与包含文本变体的任何节点相对应的 xpath。

问题是,一旦我遇到新的或删除的节点,我如何确定该节点实际上是插入/删除的节点还是现有节点的变体?

或者也许我应该采取另一种方法?

【问题讨论】:

  • 知道两个文件是否不同与知道两个文件有多么不同是非常不同的......第一个可以使用像 SHA 或更高版本的哈希这样的一种方式来完成..第二个可以是更多的 CPU 密集型...特别是如果您想非常详细地了解差异在哪里...到目前为止同意我的观点吗?
  • 是的,我同意。考虑到它们的 VTD+XML 索引,我正在寻找对两个 xml 文件有多么不同的非常精细的分析。

标签: xml-parsing vtd-xml


【解决方案1】:

也许我对您问题的解释并不完全正确。但是我觉得您尝试做的事情可能没有简单的答案...考虑以下 XML sn-p

<a>
   <b>text1</b>
   <b>text1</b>
</a>

<a>
   <b>text2</b>
   <b>text1</b>
</a>

您可以说第二个 XML 只是第一个将 text2 替换为 text1 的 XML。

但您也可以说第二个 XML 只是第一个删除第一个 b 节点,将第二个 b 节点的 text1 更改为 text2,然后在第二个 b 节点之后插入 text1

总之,您似乎不仅想知道有什么不同,还想知道导致这些差异的变化。这很困难,因为您可以做不同的事情来产生相同的输出。

【讨论】:

  • 由于我将自己定义架构,我可以使用属性来解决这个问题吗?例如 text1。当标签的内容不匹配,但标识符匹配时,我可以说这不是一个新标签,而是标签内的内容发生了变化。我想我只是回答了我自己的问题......
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 2019-06-14
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多