HTML -> XML

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

HTML -> XML

Сообщение shade »

Нужно преобразовать HTML документ в аналогичный XML для последующей обработки.

Думал использовать MSHTML - текст загрузил, а как преобразовать не знаю. Думал что может приведение типа ( xdoc := doc.documentElement as IXMLDOMElement ) не помогло, интерфейс не поддерживается.

Видимо лучший вариант - сделать обход дерева элементов doc.documentElement: IHTMLElement - на сколько я понял корневой элемент, т.е. <HTML>, а как пройтись по его потомкам не понятно: есть свойство children, но оно IDispatch?..

// Delphi

Код: Выделить всё

program test;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils, Variants, ActiveX, MSHTML;

function AnsiToDos(const S: string): string;
begin
  SetLength(Result, Length(S));
  CharToOem(@S[1], @Result[1]);
end;

procedure do_test;
var doc: DispHTMLDocument;
begin
  doc := CoHTMLDocument.Create;
  doc.write('<html>');
  writeln(doc.documentElement.outerHTML);
end;

begin
  CoInitialize(nil);
  try
    writeln('MSHTML example');
    do_test;
    writeln;
    writeln('ok');
  except
    on E: Exception do
    begin
      writeln;
      writeln(E.ClassName, ': ', AnsiToDos(E.Message));
    end;
  end;
  readln;
  CoUninitialize;
end.
Yogrik
постоялец
Сообщения: 116
Зарегистрирован: 22.03.2006 23:41:48

Сообщение Yogrik »

С начало конвертировать в XHTML с помощью tidy
А потом открыть парсером XML
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Попробовал tidy, точнее врапер Delphi/Object Pascal и их демку.
На первой же html-ке выдал ошибки, в частности 155: 2 (Errror) [5.5.2.1]: <table> missing <caption>.
А исправленого контента нету :(
Нужно чтобы вне зависимости от ошибок выдавался более-менее ожидаемый результат.

В случае MSHTML обход почти реализовал, осталась проблема - получить список атрибутов для элемента IHTMLElement...
Yogrik
постоялец
Сообщения: 116
Зарегистрирован: 22.03.2006 23:41:48

Сообщение Yogrik »

А какую именно демку???
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

в приведенной ссылке
Ответить