Текущий архив: 2004.01.13;
Скачать: CL | DM;
ВнизУбираем HTML-тэги Найти похожие ветки
← →
LVV (2003-12-26 19:15) [0]Добрый вечер. Срочно нужен Ваш совет.
Нужно из HTML-документов убрать все тэги, чтобы остался только содержательный текст. Не хочу париться с поиском тегов. У меня есть идея, но что-то не как не докумекаю, как это сотворить. А идея такая:
1) Загрузить HTML-документ в TWebBrowser
2) Выделить в нём весь текст <CTRL>+<A> и скопировать в ClipBoard
или в какой-нибудь другой буфер
3) Вставить содержимое буфера в новый текстовый файл
Собственно, вопрос в пункте (2)! Как?
Очень признателен за Ваши ответы.
Спасибо
← →
nikkie (2003-12-26 19:18) [1]1) - правильно, остальное не нужно.
(WB.DefaultInterface.Document as IHTMLDocument2).body.innerText
← →
LVV (2003-12-26 19:28) [2]2 nikkie
Пишет "Undeclared identifier IHTMLDocument2"
В uses чего-то нет что-ли?
Пока код такой
uses
Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs,
StdCtrls, Buttons, FileCtrl, ExtCtrls, OleCtrls, SHDocVw;
← →
nikkie (2003-12-26 19:32) [3]MSHTML
← →
LVV (2003-12-26 19:38) [4]Спасибо.
← →
Ломброзо (2003-12-26 19:40) [5]$var =~s/<.*?>//g
отож раз в X быстрей... Мерил, поеврьте!
← →
nikkie (2003-12-26 19:42) [6]охотно верю. но результаты будут разные :)
← →
LVV (2003-12-26 20:33) [7]2 nikkie
Это снова я. :)
Что-то Delphi ругается ("Access Violation") на этот метод
Пишу
procedure TfmMain.Button1Click(Sender: TObject);
var
s: WideString;
begin
WebBrowser1.Navigate("C:\Мои документы\1.htm");
s := (WebBrowser1.DefaultInterface.Document as IHTMLDocument2).body.innerText;
Memo1.Text := s;
end;
После первого клика по кнопке показывается сообщение Access Violation
После второго клика - всё нормально, в Memo отображается внутренний текст.
Тестировал на файлах разного размера. Вывод: размер не влияет
Как это можно победить?
← →
nikkie (2003-12-26 20:42) [8]Navigate выполняется асинхронно, поэтому надо либо проверять WebBrowser.DefaultInterface.Busy, либо ждать события OnNavigateComplete и только после этого обращаться к документу. но можно сделать без Navigate:
var
Doc: OleVariant;
begin
Doc := WebBrowser.DefaultInterface.Document;
Doc.Write(sHTML);
Doc.Close;
sText := (WebBrowser1.DefaultInterface.Document as IHTMLDocument2).body.innerText;
end;
← →
LVV (2003-12-26 20:52) [9]Всё работает как часы.
Большое спасибо.
← →
ЮрийК (2003-12-29 14:23) [10]Doc := WebBrowser.DefaultInterface.Document;
Doc.Write(sHTML);
Doc.Close;
sText := (WebBrowser1.DefaultInterface.Document as IHTMLDocument2).body.innerText;
Поясните, что происходит? Объясните словами кратко логику, как это обходится использование функции Navigate?
WebBrowser, WebBrowser1 - два WebBrowser-а используются?
sHTML - это новый файл записывается через фунуцию Write?
← →
nikkie (2003-12-30 02:06) [11]>Поясните, что происходит? Объясните словами кратко логику, как это обходится использование функции Navigate?
совсем без navigate нельзя, нужно чтобы хотя бы пустой документ был загружен. после этого документ можно изменять частично или полностью. первые три строчки как раз и изменяют исходник документа. причем работа идет с использованием позднего связывания, как в скриптовых языках. это происходит потому, что Doc объявлен как OleVariant. в данном случае я предпочитаю позднее связывание, поскольку получается значительно проще (если интересно, как сделать то же самое с использование раннего связывания - посмотри по ссылке http://members.shaw.ca/iedelphi/ - FAQs - WebBrowser - How do I load a string into the WebBrowser without Navigating to a file? - по сути это калька с C++-кода). в остальных случаях я предпочитаю использовать раннее связывание, как, например, сделано в четвертой строке, хотя точно также можно было написать Doc.body.innerText. но у позднее связывание не дает возможность компилятору проверить правильность написания имен свойств и вызовов функций COM-объекта - все ошибки надо ловить в run-time. соответственно и code completition ничего подсказать не сможет.
>WebBrowser, WebBrowser1 - два WebBrowser-а используются?
нет, это опечатка.
Страницы: 1 вся ветка
Текущий архив: 2004.01.13;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.008 c