Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

Убираем 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
14-37894
Orion2
2003-12-21 15:11
2004.01.13
Снятие шела!


1-37608
mik_1
2003-12-28 18:29
2004.01.13
прерывание исполнения программы


1-37644
Hyboid
2003-12-25 19:12
2004.01.13
DLL Strings


1-37723
Agent[007]
2003-12-28 08:19
2004.01.13
Два в одном


3-37510
redd
2003-12-16 21:56
2004.01.13
Как сделать Pack таблице из делфи???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский