У кого-либо есть различный алгоритм для представленного HTML? [закрытый]

pythonic предлагает zip вдоль некоторых других подобных питону функций:

import {zip} from 'pythonic';

const arr1 = ['a', 'b'];
const arr2 = ['c', 'd', 'e'];
for (const [first, second] of zip(arr1, arr2))
    console.log(`first: ${first}, second: ${second}`);
// first: a, second: c
// first: b, second: d

82
задан Bill the Lizard 27 August 2011 в 22:23
поделиться

12 ответов

Существует другой хороший прием, который можно использовать для значительного улучшения вида представленного различного HTML. Хотя это не полностью решает начальную проблему, это будет иметь значительное значение в появлении Вашего представленного HTML diffs.

Бок о бок представленный HTML сделает очень трудным для Вашей разности выстроиться в линию вертикально. Выравнивание по вертикали крайне важно для сравнения бок о бок diffs. Для улучшения выравнивания по вертикали бок о бок разность, можно вставить невидимые элементы HTML в каждую версию разности в "контрольных точках", где разность должна быть вертикально выровненная. Тогда можно использовать немного клиентского JavaScript для добавления пространства по вертикали вокруг контрольной точки, пока стороны не выстраиваются в линию вертикально.

Объясненный в немного большем количестве деталей:

, Если Вы хотите использовать эту технику, выполните свой различный алгоритм и вставьте набор visibility:hidden <span> с или крошечный <div> с везде, где Ваш бок о бок присваивают версию, должен совпасть, согласно различному. Тогда выполните JavaScript, который находит каждую контрольную точку (и ее бок о бок сосед) и добавляет пространство по вертикали к контрольной точке, которая является большой шишкой (более мелкой) на странице. Теперь Ваша представленная разность HTML будет вертикально выровненная до той контрольной точки, и можно продолжить восстанавливать выравнивание по вертикали вниз остальная часть Вашего бок о бок страница.

17
ответ дан Sean Vieira 24 November 2019 в 09:21
поделиться

Я закончил тем, что нуждался в чем-то подобном некоторое время назад. Чтобы заставить HTML выстраивать в линию сторону для запасного пути Вы могли использовать два iFrames, но необходимо будет тогда связать их прокрутку с помощью JavaScript, поскольку Вы прокручиваете (если Вы позволяете прокручивать).

Для наблюдения разности, однако, Вы больше, чем, вероятно, захотите пользоваться чужой библиотекой. Я использовал DaisyDiff, библиотека Java, для подобного проекта, где мой клиент был доволен наблюдением единственного рендеринга HTML содержания с MS Word "изменения дорожки" - как разметка.

HTH

4
ответ дан kooshmoose 24 November 2019 в 09:21
поделиться

Так, Вы ожидаете

<font face="Arial">Hi Mom</font>

и

<span style="font-family:Arial;">Hi Mom</span>

считаться тем же?

вывод зависит очень от Агента пользователя. Как Ionut Anghelcovici предлагает , сделайте изображение. Сделайте один для каждого браузера, о котором Вы заботитесь.

1
ответ дан Community 24 November 2019 в 09:21
поделиться

Рассмотрите использование вывода ссылок или рыси для рендеринга версии только для текста HTML, и затем разности это.

4
ответ дан Arafangion 24 November 2019 в 09:21
поделиться

Если это - XHTML (который принимает много с моей стороны), Разность Xml Исправила бы справку Инструментария? http://msdn.microsoft.com/en-us/library/aa302294.aspx

0
ответ дан MotoWilliams 24 November 2019 в 09:21
поделиться

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

, Например, как Вы обнаружили бы, и шоу, что выровненное по левому краю изображение (плавающий оставленный абзаца текста) внезапно стало выровненным по правому краю?

0
ответ дан angry person 24 November 2019 в 09:21
поделиться

Если Вы работали с Java и XHTML, , XMLUnit позволяет Вам сравнивать два XML-документа через org.custommonkey.xmlunit. Класс DetailedDiff :

Сравнивает и описывает все различия между двумя XML-документами. Сравнение документа не останавливается, как только первое неисправимое различие найдено, в отличие от Различного класса.

0
ответ дан Ates Goral 24 November 2019 в 09:21
поделиться

Используя текст отличаются, повредится на нетривиальных документах. В зависимости от то, что Вы думаете, интуитивно, XML отличается, вероятно, генерирует diffs, которые не очень хороши для текста с разметкой. AFAIK, DaisyDiff является единственной библиотекой, специализированной на HTML. Это работает отлично для подмножества HTML.

0
ответ дан 24 November 2019 в 09:21
поделиться

Я верю хорошему способу сделать, это к , представляют HTML к изображению и затем используют [приблизительно 111] различный инструмент, который может сравнить изображения для определения различий.

-5
ответ дан 24 November 2019 в 09:21
поделиться

Используйте режим разметки Pretty Diff для HTML. Он полностью написан на JavaScript.

http://prettydiff.com/

1
ответ дан 24 November 2019 в 09:21
поделиться

А как насчет DaisyDiff (доступны версии Java и PHP ).

Следующие функции действительно хороши:

  • Работает с плохо сформированным HTML, который может быть найдено «в дикой природе».
  • Различия более специализированы на HTML, чем на XML-дереве. Изменение части текстового узла не приведет к изменению всего узла.
  • В дополнение к визуальному различию по умолчанию, исходный HTML может быть согласован.
  • Предоставляет легкие для понимания описания изменений.
  • Графический интерфейс пользователя по умолчанию позволяет легко просматривать изменения с помощью сочетаний клавиш и ссылок.
2
ответ дан 24 November 2019 в 09:21
поделиться

На выходных я опубликовал новый проект на codeplex, который реализует алгоритм HTML diff на C #. Исходный алгоритм был написан на Ruby. Я понимаю, что вы искали реализацию JavaScript, возможно, наличие такой реализации на C # с исходным кодом может помочь вам перенести алгоритм. Вот ссылка, если вам интересно: htmldiff.codeplex.com . Вы можете прочитать об этом здесь .

ОБНОВЛЕНИЕ: Эта библиотека была перемещена на GitHub .

16
ответ дан 24 November 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: