Это может быть очень проблематично делать со стандартным инструментом сравнения, если 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 классы , которые используют другое основание. Я думаю, вам понадобится написать несколько сценариев, чтобы использовать любую из этих систем.