In questo momento, sto gestendo un software che ha più file di configurazione XML. Quando viene rilasciata una nuova versione del software, a volte cambiano i file di configurazione di base, al momento abbiamo la chiamata software KDiff all'avvio. Se rileva una modifica, richiede all'utente di scegliere le modifiche.Differenziale XML programmatico in C#
Il problema di questo approccio è che KDiff è un programma di confronto tra la linea e non a conoscenza dei modi di XML (come nodi, etc.)
Idealmente, mi piacerebbe lavorare a livello di codice con una libreria in C# (dal momento che siamo un negozio di MS) che può diffare due file XML: un XML di origine e un XML di lavoro corrente.
e quindi unire le due cose insieme con alcune semplici regole:
- Se la corrente di lavoro XML ha un nodo che l'origine XML non, rimuoverlo.
- Se l'XML di origine ha un nodo che non funziona nel file XML corrente, aggiungerlo.
- Se entrambi hanno lo stesso nodo e i valori differiscono, favorire il valore del codice XML di origine, a meno che il valore del codice XML di origine sia impostato su "UseExistingValue".
Per esempio, ecco la "Sorgente" XML:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="UseExistingValue" Y="UseExistingValue" Z="UseExistingValue" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
Ed ecco la "Corrente di funzionamento" XML:
<Configuration>
<Items>
<Item Id="1" Position="false">
<Location X="123" Y="234" Z="345" />
<Another/>
<Something/>
</Item>
</Items>
</Configuration>
E la versione risultante dalla fusione sarà simile:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="123" Y="234" Z="345" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
Ho guardato il MS XML Diff and Patch Tool e questo defini unisce i file insieme, ma non consente le regole programmatiche che voglio definire.
XMLUnit for Java devs sembra promettente, ma la versione .NET sembra sottosviluppata, il che è sfortunato.
Qualcuno ha suggerimenti per gli strumenti di diffusione/unione XML con script e/o per le librerie .NET (a pagamento o gratuite)?
Grazie.
Per installare XMLDiffPatch da NuGet, vedi http: //www.nuget.org/packages/XMLDiffPatch/ – Contango