2014-10-29 2 views
0

Я сравниваю два xml-файла, используя win merge. Файлы - это файлы развертывания, и они ищут различия между средами. Основная проблема заключается в том, что xml-файлы усеяны тегами, которые указывают на изменение базового идентификатора, например. 123, но это неважно для сравнения.Regx для исключения элементов в XML-файле

Я хочу создать регулярное выражение, которое я могу использовать в winmerge, чтобы исключить элементы для сравнения только интересных элементов. например сравнить элемент в примере ниже

среды 1

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

Environment 2

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

Пожалуйста, обратите внимание, что заявл ция, производящая xml, выплевывает их в строке по порядку строки, поэтому она не является истинным xml-сравнением

ответ

2

Я бы не рекомендовал использовать regex для этого ... чтобы сделать это по-настоящему точно, вам действительно нужно эффективно проанализируйте XML, который на самом деле не является тем, для которого вы хотите использовать регулярное выражение.

Win Merge - это инструмент сравнения на основе строк, который действительно не обязательно полностью эффективен для XML. Я бы рекомендовал попробовать инструмент diff на основе XML, который имеет больше концепции древовидной структуры XML. Большинство инструментов на основе XML, похоже, являются коммерческими продуктами, но есть diffxml, который является открытым исходным кодом и может стоить того.

Если вы можете получить diff-файлы на основе XML, которые по своей сути должны быть более точными, поскольку они не полностью основаны на линиях и учитывают древовидную структуру, вы можете затем углубиться в различия, используя синтаксический анализатор XML, такой как ElementTree в Python, специально предназначенный для тегов, которые вы считаете интересными, и сравнивая их друг с другом, чтобы узнать, отличаются ли они.

Если diffxml оказывается слишком громоздким, может быть стоит просто делать синтаксический анализ с использованием ElementTree или аналогичный (т.е. LXML) и делает сравнение себя от двух разных источников, направленных только на теги в которые вас интересуют.

Короче говоря, я думаю, XML парсеры, возможно, в сочетании с инструментом дифф XML-известно, будет более полезным, чем чисто регулярных выражений эс в этом случае.

Смежные вопросы