Tại thời điểm này, tôi đang quản lý một phần mềm có nhiều tệp cấu hình XML. Khi một phiên bản phần mềm mới được phát hành, đôi khi các tệp cấu hình cơ bản thay đổi, chúng tôi hiện đang có phần mềm gọi KDiff khi khởi động. Nếu phát hiện thay đổi, nó sẽ nhắc người dùng chọn các thay đổi.Diff/XML có lập trình trong C#
Vấn đề với phương pháp này là KDiff là một so sánh chương trình dòng và không nhận thức được đường lối của XML (như nút, vv)
Lý tưởng nhất, tôi muốn lập trình làm việc với một thư viện trong C# (vì chúng ta là một cửa hàng MS) có thể Diff hai tệp XML: XML nguồn và XML hiện tại.
Và sau đó Merge hai cùng sử dụng một vài quy tắc đơn giản:
- Nếu công tác XML hiện tại có một nút rằng XML Nguồn không, loại bỏ nó.
- Nếu XML nguồn có nút mà XML hoạt động hiện tại không thêm, hãy thêm nó.
- Nếu cả hai đều có cùng một nút và giá trị khác nhau, hãy ưu tiên giá trị của XML nguồn, trừ khi giá trị của XML nguồn được đặt thành "UseExistingValue".
Ví dụ, đây là "Source" XML:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="UseExistingValue" Y="UseExistingValue" Z="UseExistingValue" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
Và đây là "hiện tại làm việc" XML:
<Configuration>
<Items>
<Item Id="1" Position="false">
<Location X="123" Y="234" Z="345" />
<Another/>
<Something/>
</Item>
</Items>
</Configuration>
Và phiên bản sáp nhập sẽ như thế nào:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="123" Y="234" Z="345" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
Tôi đã xem số MS XML Diff and Patch Tool và nó là defini hợp nhất các tệp với nhau, nhưng không cho phép các quy tắc có lập trình mà tôi muốn xác định.
XMLUnit for Java devs có vẻ đầy hứa hẹn, nhưng phiên bản .NET của nó dường như kém phát triển, điều này thật không may.
Bất kỳ ai cũng có bất kỳ đề xuất nào về công cụ Diff/Merge XML có thể viết và/hoặc thư viện .NET (trả phí hoặc miễn phí)?
Cảm ơn.
Để cài đặt XMLDiffPatch từ NuGet, xem http: //www.nuget.org/packages/XMLDiffPatch/ – Contango