正则表达式排除xml文件中的元素

时间:2014-10-29 01:15:15

标签: regex winmerge

我使用win merge比较两个xml文件。这些文件是部署文件,我正在寻找环境之间的变化。主要问题是xml文件中充满了标记,这些标记表明底层id的变化,例如:但这对比较并不重要。

我想创建一个可以在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比较

1 个答案:

答案 0 :(得分:2)

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

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

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

如果 diffxml 证明过于笨重,那么使用 ElementTree 或类似的(即 lxml )进行解析可能是值得的将您自己与仅针对您感兴趣的标签的两个不同来源进行比较。

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