Diff

Ho esaminato le risposte a questa domanda e purtroppo nessuno di loro mi ha aiutato finora.

Per non battere il cespuglio, la seconda edizione di C # in Depth è ora in copia. Voglio essere in grado di vedere cosa è effettivamente realizzato dall'editor di copia, in modo da poter rifiutare o accettare i suoi cambiamenti.

Stiamo utilizzando una forma modificata di docbook, ma sono abbastanza felice di guardare la fonte XML raw. Finora finora – tranne che quando l'editor di copia fa una modifica, questo può cambiare l'avvolgimento della linea. Quindi qualcosa che lesse:

<para>Foo bar baz second line</para> 

ora legge

 <para>Foo bar grontle baz second line</para> 

Ora il cambiamento reale è l'inserimento di "grontle". Non mi import che "baz" sia passato dalla prima row alla seconda row, ma tutti gli strumenti diff che ho visto fare.

Mi rendo conto che un'opzione sarebbe quella di riformattare tutto il documento (o forse solo i paragrafi interi) in linee singole … ma è poi difficile leggere, perché gli strumenti di diff non si avvolgono quando vengono visualizzati.

Sono sicuro che posso gestire con gli strumenti che ho, ma se qualcuno sa di qualcosa di meglio, sarei molto felice di sapere. Sospetto che anche i miei publisher.

(Ho incluso il tag Windows qui perché avrei veramente bisogno di essere disponibile in Windows. Vorrei anche sapere di qualsiasi software non Windows, ma solo nel caso in cui avrei potuto aiutare a costruirlo su Windows.

Sembra SourceGear DiffMerge vi darà questo, con il suo supporto ruleset per XML (e tante altre lingue). Non sono sicuro se correggerà tutti i tuoi problemi, perché l'esempio è ovviamente una semplificazione del programma effettivo. Ho provato cambiamenti leggermente più complessi, e quelli sembrano funzionare bene.

Vedere il campione di seguito per il diff che hai descritto

semplice diff

La mia soluzione è senza confronti . (uno strumento molto più potente)

Quindi cominciamo a vedere il problema.

immettere qui la descrizione dell'immagine

BC ha un ruolo speciale di analisi XML: (ha già il ruolo XML, ma non con la pre-analisi – che è ordinata e ordinata )

immettere qui la descrizione dell'immagine

quindi andiamo a http://www.scootersoftware.com/download.php?zz=kb_moreformats_alt

immettere qui la descrizione dell'immagine

e adesso –

immettere qui la descrizione dell'immagine

spero di utilizzarla per la prossima edizione di C # in profondità

ps se il text nelle immagini è troppo piccolo, basta click sull'image per caricare quelli originali.

Io sono l'autore di uno strumento di diff XML (software commerciale) che dovrebbe fare il lavoro (e alcune altre funzionalità). Esiste una versione di prova (limitata a file Xml di max. 100 KB) per il download qui:

http://xmldifftool.com/download_en.html

Una breve introduzione è anche disponibile qui:

http://xmldifftool.com/xtcmanual_en.html

Ho avuto questo stesso problema in un'azienda non troppo tempo fa. Volevano trovare un vero "XML differente", e non sembra che ci siano soluzioni complete là fuori.

La soluzione più semplice è quella di eseguire uno script di printing piuttosto sul primo XML per normalizzare le linee e le spaziature, quindi eseguire lo strumento diff di scelta ( WinMerge è bello per le windows). Ciò scarta un sacco di flotsam che la maggior parte dei diffusori ti lancerà da XML, ed è veramente facile creare uno script in giro.

SD Smart Differencer confronta i documenti basati sulla struttura rispetto al layout effettivo.

C'è un Smart Differencer XML. Per XML, questo significa l'ordine di corrispondenza dei tag e del contenuto. Deve notare che la string di text nel frammento specifico indicato era diversa. (Non comprende attualmente la nozione XML del text in cui lo spazio è normalizzato e significativo, ma sospetto che non ti farà molto male).

@Jon Skeet: Hai citato nella tua domanda che gli strumenti di diff non si avvolgono quando vengono visualizzati.
vimdiff (disponibile anche su windows tramite gvim ) consente di avvolgere i file xml visualizzati con :window set wrap . Collegamento di riferimento .
Inoltre è ansible eseguire :diffupdate per aggiornare le diff.