2014-10-29 67 views
0

我使用win合并比较两个xml文件。这些文件是部署文件,我正在寻找环境之间的差异。主要问题是xml文件中散布着指示底层id变化的标签,例如123但这比较不重要。Regx排除xml文件中的元素

我想创建一个正则表达式,我可以在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比较

回答

2

我不会推荐使用正则表达式为此...做到真正准确,你真的需要有效解析XML,这实际上不是你想要使用正则表达式的东西。

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

如果你可以得到基于XML的文件差异,这本应该更准确,因为它们不是完全基于行,并考虑树结构,你可以进一步深入研究差异一个XML解析器,如ElementTreePython,专门针对您认为很有趣的标签,并将它们相互比较以查看它们是否与众不同。

如果diffxml证明是太笨重,它可能是值得只是做使用ElementTree的或相似(即LXML)解析和做比较自己免受只是在标记有针对性的两个不同的来源你有兴趣。

总之,我认为XML解析器,或许与XML的差异工具组合,会比在这种情况下,纯正则表达式 ES更加有用。