【问题标题】:Design a Data Structure to compare two XML docs设计一个数据结构来比较两个 XML 文档
【发布时间】:2012-08-27 17:58:30
【问题描述】:

给定两个 XML 文档。想出一个数据结构和代码来比较两个文档并打印文档之间的差异。 (就像一个标签存在于一个而不是另一个或标签相同但数据可能不同等)

My approach :使用 N 叉树。 N 取决于 XML 文件中的属性数量。现在函数将类似于:

Bool IsIdentical(tree1,tree2)
{
   if(tree1 == NULL && tree2 == NULL)return true;
   if(tree1 || tree2) return false;
    if(tree1->data == tree2->data )return true;
   else return (Isindentical(tree1->firstchild,tree2->firstchild) &&  Isindentical(tree1->secondchild,tree2->secondchild) && ........ Isindentical(tree1->nthchild,tree2->nthchild) )

}

你能告诉我我的方法是正确的还是有其他数据结构可以比较? 如果我的方法是正确的,那么请告诉如何产生差异。

提前致谢

【问题讨论】:

    标签: xml algorithm data-structures recursion tree


    【解决方案1】:

    你的方法是正确的。另一种不需要将两个 xml 文档同时保存在内存中的方法是为每个文档构造 Merkle tree 并比较它们。

    比较差异是一个更开放的问题,取决于您如何定义文档之间的“差异”。例如。 <tag 1><tag 2><tag 3>... vs <tag 1><tag 3>,可以说<tag 1>是唯一的共同元素,或者<tag 1> & <tag 3>两者都是共同的。

    最保守(因此也很简单)的方法是在节点的任何子节点不同时声明差异并在此时停止递归,即生成两棵树的交集。实现可能如下所示:

    class Tree:
        def __init__(self, value, children):
            self.value = value
            self.children = children
    
    def intersect(a, b):
        if a.value != b.value:
            return None
        children = [x for x in itertools.imap(intersect, a.children, b.children) if x is not None]
        return Tree(a.value, children)
    

    请注意,此解决方案可能过于保守,具体取决于您的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 2017-11-08
      相关资源
      最近更新 更多