如何比较两个 XML 节点结构 Delphi

Posted

技术标签:

【中文标题】如何比较两个 XML 节点结构 Delphi【英文标题】:How compare Two XML Node Structures Delphi 【发布时间】:2013-05-05 13:25:07 【问题描述】:

有没有办法在 Delphi 中比较两个 xml 节点?

我正在使用 MSXML 解析器并将 xml 加载到 IXmlDOMDocument2 中。节点存储在 IXmlDOMNode 中。

如果有帮助,我可以使用 Delphi 的 TXMLDocument。我不想下载任何第三方组件。

我只想比较节点的结构,而不是值。

我看到Java 的类似帖子/实用程序,但对于 Delphi 没有。

谢谢!

【问题讨论】:

更新问题,不再关心属性或值。只是对比较这两种结构的简单方法感兴趣。 您希望如何呈现/描述差异? 在这一点上我很灵活。也许三个字符串列表通过引用传递。前两个将识别存在于一个中但不存在于另一个中的节点。第三个包含差异。我知道节点向下钻取,因此列表中的字符串将包含节点路径。 【参考方案1】:

由于您只想比较结构,您可以将节点转换为“完整路径”并将它们作为字符串进行比较。

例如让我们假设树木:

树A

Root -> Node1 -> Child1
              -> Child2
     -> Node2

树 B

Root -> Node1 -> Child1
     -> Node2

从转换到“完整路径”你会得到:

树A

Root
Root\Node1
Root\Node1\Child1
Root\Node1\Child2
Root\Node2

树 B

Root
Root\Node1
Root\Node1\Child1
Root\Node2

通过遍历完整路径列表,您可以快速检查和比较它们是否存在于另一棵树中。您还可以轻松找到树上的节点。

【讨论】:

以上是关于如何比较两个 XML 节点结构 Delphi的主要内容,如果未能解决你的问题,请参考以下文章

解析xml时,需要校验节点是不是闭合,如必须有与之对应,用数据结构实现比较好

delphi日期时间比较大小

将同一层次结构级别的两个节点与 PL/SQL 关联

Delphi:比较两个组件之间的属性

如何使用匹配节点连接两个 XML 文件

DELPHI数据比较问题