LINUX.ORG.RU

diff уважающий HTML :)


0

0

Не подскажет ли кто примерный алгоритм diff-а, который бы уважал структуру HTML-документа. Иными словами, результатом сравнения двух HTML-ек будет нечто вроде:

[h2]заголовок [ins]слегка[/ins][/h2][ins]изменился[/ins]

вместо

[h2]заголовок [ins]слегка[/h2]изменился[/ins]

Может можно дифф обычный как-то подкрутить более-менее несложным образом?


Ответ на: комментарий от boombick

diff(oldtext, newtext) :)

сама функция написана по мотивам статьи про дифф на англоязычной википедии. почти дословный перевод с c# на js, если вопрос состоял в этом :-D

kkw
() автор топика

Какова конечная цель?

Сформировать команды для DOM приводящие один html к другому?

sign
()
Ответ на: комментарий от kkw

Может быть такая штука наведет на мысли


import java.io.IOException;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Difference;
import org.custommonkey.xmlunit.XMLUnit;
import org.xml.sax.SAXException;

public class TestCompare
{
  public static void main(String[] args)
  {
    try
    {
      String myControlXML = "<body><h2>заголовок</h2></body>";
      String myTestXML = "<body><h2>заголовок слегка</h2>изменился</body>";

      DetailedDiff myDiff = new DetailedDiff(XMLUnit.compareXML(myControlXML,
          myTestXML));
      for (Object obj : myDiff.getAllDifferences())
      {
        Difference diff = (Difference) obj;
        System.out.println(diff.getDescription());
        System.out.println(diff.toString());
      }
    } catch (SAXException e)
    {
      e.printStackTrace();
    } catch (IOException e)
    {
      e.printStackTrace();
    }
  }
}

результат работы

number of child nodes
Expected number of child nodes '1' but was '2' - comparing <body...> at /body[1] to <body...> at /body[1]
text value
Expected text value 'заголовок' but was 'заголовок слегка' - comparing <h2 ...>заголовок</h2> at /body[1]/h2[1]/text()[1] to <h2 ...>заголовок слегка</h2> at /body[1]/h2[1]/text()[1]
presence of child node
Expected presence of child node 'null' but was '#text' - comparing  at null to <body ...>изменился</body> at /body[1]/text()[1]


sign
()
Ответ на: комментарий от sign

Ну у меня примерно так и происходит сейчас :-D Просто люто медленно это работает на JS :-D Я думал есть более кошерный алгоритмец.

kkw
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.