Добавьте обе стороны diff для слияния - PullRequest
1 голос
/ 21 января 2009

У меня есть два XML-файла. Они похожи, но есть два узла, из которых любой из файлов имеет только один. Я хочу объединить два набора таких документов в один документ, где сначала берется узел стороны A, а затем узлы стороны B.

Я не опытный пользователь инструментов сравнения и скачал KDiff3, чтобы начать где-нибудь .. Кто-нибудь может поставить меня на правильный путь?

- EDIT -
Поиск инструментов сравнения - это то, чем я могу управлять самостоятельно.
Но как заставить один из этих инструментов (неважно, какой из них) сделать слияние автоматически, сначала вставив часть из файла file1, а затем из file2, - это то, что я ищу. Это довольно большое количество файлов, поэтому я бы не хотел вмешиваться в процесс слияния.

Ответы [ 4 ]

1 голос
/ 29 января 2009

Это может быть очень проблематично делать со стандартным инструментом сравнения, если xml-узлы каким-либо образом похожи. Например:

file1:

1 <node id="1" />
2 <node id="2a">
3   <content item="1"/>
4   <content item="2a"/>
5 </node>
6 <node id="3" />

file2:

1 <node id="1" />
2 <node id="2b">
3   <content item="1"/>
4   <content item="2b"/>
5 </node>
6 <node id="3" />

Стандартный инструмент сравнения собирается выделить строки 2 и 4 как нуждающиеся в слиянии, но даже если вы автоматически добавите строки из файла2, вы получите недопустимый XML-файл:

1 <node id="1" />
2 <node id="2a">
2 <node id="2b">
3   <content item="1"/>
4   <content item="2a"/>
4   <content item="2b"/>
5 </node>
6 <node id="3" />

Вам действительно нужен инструмент diff / merge, поддерживающий xml. Я нашел описание одного из них XmlMerge , а также пример, демонстрирующий, что он выполняет именно то, что вы просите. Это часть EL4J .

Существует неактивное усилие под названием XUpdate , которое содержит достаточное количество инструментов (как для генерации различий XUpdate, так и для их применения). Есть также некоторые .net классы , которые используют другое основание. Я думаю, вам понадобится написать несколько сценариев, чтобы использовать любую из этих систем.

1 голос
/ 21 января 2009

Это больше похоже на программное обеспечение для создания, чем на программное обеспечение для поиска.

Если вы свернули свой собственный, вы можете добавить дополнительные проверки, что оба XML-кода действительны.

1 голос
/ 21 января 2009

DiffMerge . Это бесплатно и работает для Windows, Mac OS X и Unix.

0 голосов
/ 21 января 2009

KDiff3 может поместить обе входные версии в выходной файл. Есть кнопки с метками A и B. Вы можете нажать на одну из них, чтобы добавить одну версию в объединенный результат. Или вы можете нажать на них обоих, и обе версии будут включены. Порядок нажатия этих кнопок будет влиять на порядок вставленных строк.

Может также объединять целые каталоги.

Кажется, единственная проблема связана с автоматизацией.

Сочетания клавиш в KDiff3 могут быть настроены довольно широко, поэтому я бы попробовал поискать здесь, а затем, возможно, использовать какое-нибудь приложение для создания сценариев клавиатуры.

Может быть и другой, более простой способ: -)

...