13

Я посмотрел на ответы на этот вопрос, и, к сожалению, ни один из них не помог мне до сих пор.

Не говоря уже о кустарнике, второе издание C # in Depth теперь находится в режиме редактирования. Я хочу быть в состоянии увидеть, что действительно сделал редактор копирования, поэтому я могу отклонить или принять его изменения.

Мы используем измененную форму документации, но я достаточно счастлив, глядя на исходный XML-источник. Пока все хорошо - за исключением того, что когда редактор копий вносит изменения, это может изменить перенос строки. Итак, то, что раньше читало:

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

сейчас читает

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

Теперь реальным изменением здесь является вставка слова "гронтл". Мне все равно, что "baz" переместился с первой строки на вторую, но все инструменты различий, которые я видел, делают.

Я понимаю, что одним из вариантов было бы переформатировать весь документ (или, возможно, только целые абзацы) в одну строку ... но тогда это действительно трудно читать, потому что инструменты diff не переносятся при отображении.

Я уверен, что смогу справиться с инструментами, которые у меня есть, но если кто-нибудь знает что-то лучше, я был бы очень рад услышать об этом. Я подозреваю, что мои издатели тоже.

(Я включил тег Windows здесь, потому что мне действительно нужно, чтобы он был доступен в Windows. Я также хотел бы услышать о любом программном обеспечении, отличном от Windows, но только в том случае, если я смогу помочь создать его на Windows.

6 ответов6

9

Похоже, SourceGear DiffMerge даст вам это с его поддержкой набора правил для XML (и многих других языков). Я не уверен, что это решит все ваши проблемы, потому что пример, конечно, является упрощением самой программы. Я попробовал немного более сложные изменения, и они, кажется, тоже работают нормально.

См. Образец ниже для различий, которые вы описали

простой дифференциал

4

Мое решение вне всякого сравнения. (гораздо более мощный инструмент)

Итак, мы начинаем с рассмотрения проблемы.

BC имеет специальную роль синтаксического анализа XML: (у него уже есть роль XML, но не с предварительным анализом - который отсортирован и приведен в порядок)

поэтому мы идем на http://www.scootersoftware.com/download.php?zz=kb_moreformats_alt

и сейчас -

надеюсь, что вы будете использовать его для следующего выпуска C # в глубине

ps если текст на картинках слишком маленький, просто нажмите на картинку, чтобы загрузить оригинальные.

1

Я являюсь автором инструмента XML diff (коммерческого программного обеспечения), который должен выполнять эту работу (и некоторые другие функции). Существует тестовая версия (которая ограничена Xml-файлами не более 100 КБ) для загрузки здесь:

http://xmldifftool.com/download_en.html

Краткое введение также доступно здесь:

http://xmldifftool.com/xtcmanual_en.html

0

@Jon Skeet: Вы упомянули в своем вопросе, что инструменты сравнения не переносятся при отображении.
vimdiff (также доступен в windows через gvim) позволяет обернуть отображаемые xml-файлы с помощью :window set wrap . Ссылочная ссылка .
Также вы можете запустить :diffupdate чтобы обновить различия .

0

SD Smart Differencer сравнивает документы на основе структуры, а не фактического макета.

Есть интеллектуальная разница XML. Для XML это означает соответствие порядка тегов и содержимого. Следует отметить, что текстовая строка в указанном вами фрагменте была другой. (В настоящее время он не понимает XML-понятие текста, в котором пробелы нормализованы и значительны, но я подозреваю, что это не сильно повредит вам).

0

У меня была такая же проблема в компании не так давно. Они хотели найти настоящую "разницу XML", и, похоже, не существует каких-либо законченных решений.

Самое простое решение - сначала запустить сценарий pretty-print для XML, чтобы нормализовать окончания строк и интервалы, а затем запустить выбранный инструмент сравнения (WinMerge подходит для окон). Это избавляет от большого количества flotsam, который большинство difftools генерирует на вас из XML, и действительно легко создать сценарий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .