Diff XML tolérant à la longueur de ligne

13

J'ai regardé les réponses à cette question , et malheureusement aucune ne m'a aidé jusqu'à présent.

Pour ne pas tourner autour du pot, la deuxième édition de C # in Depth est maintenant en édition de copie. Je veux pouvoir voir ce que l'éditeur de copie a fait très facilement, afin de pouvoir rejeter ou accepter ses modifications.

Nous utilisons une forme modifiée de docbook, mais je suis assez content de regarder la source XML brute. Tout va bien jusqu'à présent - sauf que lorsque l'éditeur de copie effectue un changement, cela peut changer le retour à la ligne. Donc, quelque chose qui disait:

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

lit maintenant

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

Maintenant, le vrai changement ici est l'insertion de "grontle". Peu m'importe que "baz" soit passé de la première ligne à la deuxième ligne, mais tous les outils de diff que j'ai vus le font.

Je me rends compte qu'une option serait de reformater le document entier (ou peut-être seulement des paragraphes entiers) en lignes simples ... mais c'est alors vraiment difficile à lire, car les outils de diff ne s'emballent pas lorsqu'ils s'affichent.

Je suis sûr que je peux gérer avec les outils dont je dispose, mais si quelqu'un sait mieux, je serais vraiment heureux d'en entendre parler. Je soupçonne que mes éditeurs le feraient aussi.

(J'ai inclus la balise Windows ici parce que j'aurais vraiment besoin qu'elle soit disponible sur Windows. J'aimerais également entendre parler de tout logiciel non Windows, mais seulement au cas où je pourrais aider à le construire sur Windows.

Jon Skeet
la source

Réponses:

9

On dirait que SourceGear DiffMerge vous le donnera, avec son support de règles pour XML (et beaucoup d'autres langues). Je ne sais pas si cela résoudra tous vos problèmes, car l'exemple est bien sûr une simplification du programme réel. J'ai essayé des changements légèrement plus complexes, et ceux-ci semblent bien fonctionner aussi.

Voir l'exemple ci-dessous pour le diff que vous avez décrit

diff simple

Sander Rijken
la source
1
Je viens de jeter un coup d'œil aux vrais fichiers, et il semble que cela fonctionne parfaitement. Merci donc beaucoup!
Jon Skeet
4

Ma solution est incomparable . (un outil beaucoup plus puissant)

Nous commençons donc par voir le problème.

entrez la description de l'image ici

BC a un rôle d'analyse XML spécial: (il a déjà un rôle XML, mais pas avec une pré-analyse - qui est triée et rangée )

entrez la description de l'image ici

donc nous allons à http://www.scootersoftware.com/download.php?zz=kb_moreformats_alt

entrez la description de l'image ici

et maintenant -

entrez la description de l'image ici

j'espère que vous l'utiliserez en profondeur pour la prochaine édition de C #

ps si le texte dans les images est trop petit, cliquez simplement sur l'image pour charger les originaux.

Royi Namir
la source
Btw que signifie " Namir.78 "?
Pacerier
0

J'ai eu ce même problème dans une entreprise il n'y a pas si longtemps. Ils voulaient trouver une véritable "différence XML", et il ne semble pas y avoir de solutions complètes.

La solution la plus simple consiste à exécuter un joli script d'impression sur le XML pour normaliser les terminaisons de ligne et l'espacement, puis à exécuter l'outil de choix de choix ( WinMerge est agréable pour Windows). Cela supprime une grande partie du flotsam que la plupart des outils diffèrent vous lancer à partir de XML, et il est vraiment facile de construire un script.

jweede
la source
Le problème est que le XML est déjà assez imprimé, en fait - ce sont les insertions et les suppressions qui changent où les lignes sont encapsulées. Je me demande si j'ai besoin de quelque chose pour reformater un fichier en fonction des mots qui apparaissent à la fin des lignes dans un autre :(
Jon Skeet
0

SD Smart Differencer compare les documents en fonction de la structure par opposition à la mise en page réelle.

Il y a un différentiateur intelligent XML. Pour XML, cela signifie l'ordre de correspondance des balises et du contenu. Il convient de noter que la chaîne de texte dans le fragment spécifique que vous avez indiqué était différente. (Il ne comprend pas actuellement la notion XML de texte dans lequel les espaces sont normalisés vs significatifs, mais je pense que cela ne vous fera pas beaucoup de mal).

Ira Baxter
la source
0

@ Jon Skeet: Vous avez mentionné dans votre question que les outils de diff ne se terminent pas lorsqu'ils s'affichent.
vimdiff(également disponible sur Windows via gvim) vous permet d'envelopper les fichiers xml affichés avec :window set wrap. Lien de référence .
Vous pouvez également exécuter :diffupdatepour actualiser les différences.

GuruM
la source