XML tolerujący długość linii

13

Przejrzałem odpowiedzi na to pytanie i niestety żadna z nich nie pomogła mi do tej pory.

Druga edycja C # w Depth jest teraz w wersji do edycji. Chcę móc zobaczyć, co edytor kopii zrobił naprawdę łatwo, więc mogę odrzucić lub zaakceptować jego zmiany.

Używamy zmodyfikowanej formy docbook, ale cieszę się, że mogę zobaczyć surowe źródło XML. Jak dotąd wszystko w porządku - poza tym, że gdy edytor kopii dokona zmiany, może to zmienić zawijanie linii. Więc coś, co zwykło czytać:

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

teraz czyta

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

Teraz prawdziwą zmianą jest wstawienie „grontle”. Nie obchodzi mnie, że „baz” przeniósł się z pierwszej linii do drugiej linii, ale wszystkie narzędzia diff, które widziałem, działają.

Zdaję sobie sprawę, że jedną z opcji byłoby przeformatowanie całego dokumentu (lub ewentualnie całych akapitów) do pojedynczych wierszy ... ale to jest naprawdę trudne do odczytania, ponieważ narzędzia różnicowania nie zawijają się podczas wyświetlania.

Jestem pewien, że poradzę sobie z narzędziami, które posiadam, ale jeśli ktoś wie coś lepszego, bardzo chętnie o tym usłyszę. Podejrzewam, że moi wydawcy też by to zrobili.

(Umieściłem tutaj znacznik Windows, ponieważ naprawdę potrzebuję, aby był dostępny w systemie Windows. Chciałbym też usłyszeć o każdym oprogramowaniu innym niż Windows, ale tylko w przypadku, gdybym mógł pomóc w jego zbudowaniu w systemie Windows.

Jon Skeet
źródło

Odpowiedzi:

9

Wygląda na to, że SourceGear DiffMerge da ci to dzięki obsłudze zestawu reguł dla XML (i wielu innych języków). Nie jestem pewien, czy to rozwiąże wszystkie twoje problemy, ponieważ przykład jest oczywiście uproszczeniem samego programu. Próbowałem nieco bardziej skomplikowanych zmian, które wydają się działać dobrze.

Zobacz próbkę poniżej dla opisanej przez siebie różnicy

prosty diff

Sander Rijken
źródło
1
Właśnie rzuciłem okiem na prawdziwe pliki i wygląda na to, że doskonale spełnia swoje zadanie. Dziękuję tak dużo!
Jon Skeet,
4

Moje rozwiązanie jest niezrównane . (znacznie potężniejsze narzędzie)

Zaczynamy więc od dostrzeżenia problemu.

wprowadź opis zdjęcia tutaj

BC ma specjalną rolę analizującą XML: (ma już rolę XML, ale nie ma wstępnej analizy - która jest posortowana i uporządkowana )

wprowadź opis zdjęcia tutaj

więc wchodzimy na http://www.scootersoftware.com/download.php?zz=kb_moreformats_alt

wprowadź opis zdjęcia tutaj

i teraz -

wprowadź opis zdjęcia tutaj

mam nadzieję, że użyjesz go do następnej edycji C # dogłębnie

ps, jeśli tekst na zdjęciach jest zbyt mały, po prostu kliknij obraz, aby załadować oryginalne.

Royi Namir
źródło
Przy okazji, co oznacza „ Namir.78 ”?
Pacerier
0

Niedawno miałem ten sam problem w firmie. Chcieli znaleźć prawdziwy „XML różni się” i wydaje się, że nie ma tam kompletnych rozwiązań.

Najłatwiejszym rozwiązaniem jest uruchomienie najpierw ładnego skryptu na XML, aby znormalizować zakończenia linii i odstępy, a następnie uruchomić wybrane narzędzie różnicowania ( WinMerge jest miły dla systemu Windows). Powoduje to utratę wielu flotsam, które większość difftools rzuci na ciebie z XML, i jest naprawdę łatwe do zbudowania skryptu.

jweede
źródło
Problem polega na tym, że XML jest już dość dobrze wydrukowany - to wstawienia i usunięcia zmieniają się tam, gdzie linie są zawijane. Zastanawiam się, czy potrzebuję czegoś, aby sformatować jeden plik na podstawie słów, które występują na końcach wierszy w innym :(
Jon Skeet
0

SD Smart Differencer porównuje dokumenty na podstawie struktury w przeciwieństwie do faktycznego układu.

Jest XML Smart Differencer. W przypadku XML oznacza to dopasowanie kolejności znaczników i treści. Należy zauważyć, że ciąg tekstowy we wskazanym fragmencie był inny. (Obecnie nie rozumie pojęcia XML tekstu, w którym białe znaki są znormalizowane vs. znaczące, ale podejrzewam, że nie zaszkodzi ci to zbytnio).

Ira Baxter
źródło
0

@Jon Skeet: Wspomniałeś w swoim pytaniu, że narzędzia diff nie zawijają się podczas ich wyświetlania.
vimdiff(dostępny również w gvimsystemie Windows za pośrednictwem ) umożliwia zawijanie wyświetlanych plików XML :window set wrap. Link referencyjny .
Możesz także uruchomić, :diffupdateaby odświeżyć pliki różnic.

GuruM
źródło