0

我正在使用 win 合并比较两个 xml 文件。这些文件是部署文件,我正在寻找环境之间的变化。主要问题是 xml 文件中到处都是标记,这些标记表明基础 id 发生了变化,例如 123,但这对于比较并不重要。

我想创建一个正则表达式,我可以在 winmerge 中使用它来排除元素以仅比较有趣的元素。例如,比较下面示例中的元素

环境1

<table>
 <tableInfo>
 <tableId>293</tableId>
 <name>Table Name New</name>
 <repositoryId>0</repositoryId>

环境 2

<table>
 <tableInfo>
 <tableId>965</tableId>
 <name>Table Name Old</name>
 <repositoryId>0</repositoryId>

请注意,生成 xml 的应用程序按行顺序吐出这些,因此它不是真正的 xml 比较

4

1 回答 1

2

我不建议为此使用正则表达式...要真正准确地做到这一点,您确实需要有效地解析 XML,这实际上不是您想要使用正则表达式的东西。

Win Merge是一个基于行的 diff 工具,它实际上不一定对 XML 完全有效。我建议尝试使用基于 XML 的 diff 工具,它具有更多 XML 树结构的概念。大多数基于 XML 的 diff 工具似乎都是商业产品,但有diffxml,它是开源的,可能值得一看。

如果您可以获得基于 XML 的文件差异,这本质上应该更准确,因为它们不是完全基于行的,并且考虑到树结构,那么您可以使用 XML 解析器进一步深入研究差异,例如Python中的ElementTree,专门针对您认为有趣的标签并将它们相互比较以查看它们是否不同。

如果diffxml被证明太笨拙,则可能值得使用ElementTree或类似(即lxml)进行解析,并自己与仅针对您感兴趣的标签的两个不同源进行比较。

简而言之,我认为在这种情况下, XML解析器可能与 XML 感知的 diff 工具结合使用会比纯正则表达式更有用。

于 2014-10-29T02:34:48.017 回答