crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
bynet
  опции профиля:
сообщение 13.11.2008, 20:38
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Мне надо написать html браузер. При написании его нельзя использовать практически никаких библиотек. Тоесть на читом visual studio. Без всяких STL, MFC. Но разрешили на qt,

Решил реализовывать использую регулярные выражения. Но стандартную библиотеку для работы с регуляными выражениями мне использовать нельзя.

Как лучше организовать регулярные выражения(алгоритм)? Или может лучше будет организовать другим способом?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 13.11.2008, 22:46
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Столкнувшись с написанием конвертера HTML в WIKI формата, могу сказать точно, что регулярные выражения дял правильного разбора HTML использовать нельзя! :(

Например с помощью регулярного выражения правильно разобрать конструкцию с произвольной вложенностью невозможно:
<ol>
   <li>text1</li>
</ol>
<ol>
   <li>text2</li>
   <ol>
      <li>text3</li>
   </ol>
   <li>text4</li>
</ol>
<ol>
   <li>text5</li>
</ol>

небольшую дискусию об этом можно прочитать в теме: Разбор трехэтажных вложенных тегов, <ol> <li>...
То же относится к тэгам table или div, но с ними проще в отличии от приведенной мной выше конструкции.

Поэтому думаю тебе стоит написать свой парсер, который в принципе для твоих нужд будет написать не сложно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 13.11.2008, 22:57
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 13.11.2008, 22:46) *
Поэтому думаю тебе стоит написать свой парсер, который в принципе для твоих нужд будет написать не сложно.


Можно чуток по подробней. Как парсить? Где прочитать? Возможно ли это реализовать на QT?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 13.11.2008, 23:13
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(bynet @ 13.11.2008, 21:38) *
Мне надо написать html браузер. При написании его нельзя использовать практически никаких библиотек. Тоесть на читом visual studio. Без всяких STL, MFC. Но разрешили на qt,

Решил реализовывать использую регулярные выражения. Но стандартную библиотеку для работы с регуляными выражениями мне использовать нельзя.

Как лучше организовать регулярные выражения(алгоритм)? Или может лучше будет организовать другим способом?


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

Кстати, WebKit в составе Qt не спасёт отца русской демократии ?

FYI, Уже в m$ потенциально посматривают в сторону WebKit'а...

Сообщение отредактировал bobdva - 13.11.2008, 23:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 13.11.2008, 23:22
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(bobdva @ 13.11.2008, 23:13) *
Цитата(bynet @ 13.11.2008, 21:38) *
Мне надо написать html браузер. При написании его нельзя использовать практически никаких библиотек. Тоесть на читом visual studio. Без всяких STL, MFC. Но разрешили на qt,

Решил реализовывать использую регулярные выражения. Но стандартную библиотеку для работы с регуляными выражениями мне использовать нельзя.

Как лучше организовать регулярные выражения(алгоритм)? Или может лучше будет организовать другим способом?


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

Кстати, WebKit в составе Qt не спасёт отца русской демократии ?

FYI, Уже в m$ потенциально посматривают в сторону WebKit'а...

Я спрашиваю как это организовать... Тоесть как парсить на словах..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 14.11.2008, 0:09
Сообщение #6


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(bobdva @ 13.11.2008, 23:13) *
Кстати, WebKit в составе Qt не спасёт отца русской демократии ?
На сколько я знаю это ему в универе дали задание, а там как известно халява вроде Webkit'a не пройдет. :(

Тоесть как я понимаю достаточно сделать вывод результата в консоль и не более того. :)

Цитата(bynet @ 13.11.2008, 23:22) *
Я спрашиваю как это организовать... Тоесть как парсить на словах..
У тебя есть массив символов, в цикле проходишь его и проверяешь на наличие открывающегося тэга или закрывающегося, дальше отображаешь даныне в зависимости от того, что за тэг.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 14.11.2008, 8:58
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 14.11.2008, 1:09) *
Цитата(bobdva @ 13.11.2008, 23:13) *
Кстати, WebKit в составе Qt не спасёт отца русской демократии ?
На сколько я знаю это ему в универе дали задание, а там как известно халява вроде Webkit'a не пройдет. :(

Тоесть как я понимаю достаточно сделать вывод результата в консоль и не более того. :)


а чем SAX Parser не устраивает для данной задачи ? :)
сомневаюсь, что потребуется делать анализ html с ошибками с точки зрения xml (не закрытые теги, одиночные теги типа <br> и т.п)

Сообщение отредактировал bobdva - 14.11.2008, 8:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2008, 9:59
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(bobdva @ 14.11.2008, 11:58) *
а чем SAX Parser не устраивает для данной задачи ?
раз уж человеку STL нельзя использовать значит суть задания - построить синтаксический анализатор, читай SAX.

Цитата(ViGOur @ 14.11.2008, 1:46) *
Поэтому думаю тебе стоит написать свой парсер, который в принципе для твоих нужд будет написать не сложно.
Согласен

Я предлагаю сделать отдельный клас в стиле SAX-reader'а который будет обнаруживать во входной символьной последовательности:
1) открывающийся тэг
2) закрывающийся тэг
2) ошибку
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 14.11.2008, 10:33
Сообщение #9


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 14.11.2008, 9:59) *
раз уж человеку STL нельзя использовать

в qt же облегченная версия stl есть, больше особо и не нада, тем более студенту. И вообще не понятно - mfc и stl нельзя, а qt - можно. Смысл?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2008, 11:06
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 14.11.2008, 13:33) *
Смысл?
парсер прийдется писать руками, но можно использовать довольно удобный класс QString, а всю суть парсера человек постигнет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 14.11.2008, 16:00
Сообщение #11


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 14.11.2008, 11:06) *
парсер прийдется писать руками,

почему?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2008, 16:51
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 14.11.2008, 19:00) *
почему?
это задание такое
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 14.11.2008, 17:43
Сообщение #13


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 14.11.2008, 16:51) *
это задание такое

это то я понял, я имел ввиду почему при запрете mfc и stl парсер придется писать руками, а если бы не запретили, то как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2008, 18:05
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 14.11.2008, 20:43) *
а если бы не запретили, то как?
взял бы WebKit ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 17.11.2008, 12:24
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Огромное спасибо буду пробовать.

Сообщение отредактировал bynet - 17.11.2008, 12:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 18.11.2008, 13:12
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Читаю строку QTextStream::readline как мне онализировать посимвольно эту строку?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 18.11.2008, 13:19
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(bynet @ 18.11.2008, 13:12) *
Читаю строку QTextStream::readline как мне онализировать посимвольно эту строку?

Можно с помощью регулярных выражений. Можно анализировать в цикле - ведь строка - это массив символов! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 18.11.2008, 21:21
Сообщение #18


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(AD @ 18.11.2008, 13:19) *
Цитата(bynet @ 18.11.2008, 13:12) *
Читаю строку QTextStream::readline как мне онализировать посимвольно эту строку?

Можно с помощью регулярных выражений. Можно анализировать в цикле - ведь строка - это массив символов! :)


Я понимаю что это массив символам, вопрос именно к ним обращаться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.11.2008, 0:50
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


А что именно хочешь? Я не очень понимаю. Вот так обращаться к ним:
QString string = "Hello, World!";
for(int i=0; i<str.size(); ++i)
{
    QChar p = string[i];
     // какие-то действия с этим символом
}

Или еще что-то? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 19.11.2008, 10:59
Сообщение #20


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ок!
Вот у меня есть строка Qstring str="asd <h1>qwe</h2> fgh";

Делаю следующее

QChar p;
for (int i=0;i<str.size();++i);
{
if(str.at(i)== QChar('<'))

Как из строки asd <h1>qwe</h2> удалить к примеру <h1> чтобы строка стала asd qwe</h2> fgh
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.11.2008, 11:55
Сообщение #21


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


bynet, яб тебе всетаки рекомендовал использовать подход SAX, т.к. ты можешь использовать С++.

Т.е. ты создаешь класс SAX-парсера, передаешь ему файл, а он выпоняет поиск тэгов. Посмотри примеры Qt'явые по SAX'у.
в наследнике своего SAX-парсера переопределяешь функции такого вида:
openTag(QString tag, QString text)
closeTag(QString tag)

первая вызывается парсером, когда он обнаруживает открывающийся текст, и в нее парсер передает имя тэга "foo" (<foo>) и строку, которую он обнаружил от этого отрывающегося тэга до символа "<"

вторая вызывается, когда парсер обнаружил закрывающийся тэг "bar" (</bar>).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 19.11.2008, 12:38
Сообщение #22


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Огромное спасибо, но мне минимум можно использовать стандартных функций. Все практически надо написать самому. Тоесть если строку парсить то надо написать свой парсер
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.11.2008, 13:09
Сообщение #23


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


QString & QString::remove ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive )
QString & QString::remove ( QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive )
Цитата
QString & QString::remove ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive )
This is an overloaded member function, provided for convenience.
Removes every occurrence of the given str string in this string, and returns a reference to this string.
If cs is Qt::CaseSensitive (the default), the search is case sensitive; otherwise the search is case insensitive.
This is the same as replace(str, "", cs).
See also replace().

QString & QString::remove ( QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive )
This is an overloaded member function, provided for convenience.
Removes every occurrence of the character ch in this string, and returns a reference to this string.
If cs is Qt::CaseSensitive (the default), the search is case sensitive; otherwise the search is case insensitive.
Example:
QString t = "Ali Baba";
t.remove(QChar('a'), Qt::CaseInsensitive);
// t == "li Bb"
This is the same as replace(ch, "", cs).


QString & QString::replace ( const QString & before, const QString & after, Qt::CaseSensitivity cs = Qt::CaseSensitive )
Цитата
QString & QString::replace ( const QString & before, const QString & after, Qt::CaseSensitivity cs = Qt::CaseSensitive )
This is an overloaded member function, provided for convenience.
Replaces every occurrence of the string before with the string after.
If cs is Qt::CaseSensitive (the default), the search is case sensitive; otherwise the search is case insensitive.
Example:
QString str = "colour behaviour flavour neighbour";
str.replace(QString("ou"), QString("o"));
// str == "color behavior flavor neighbor"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 19.11.2008, 16:09
Сообщение #24


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот к чему я пришел
CODE

void Parser::open()
{ QString szLine;
QString absFileName = QFileDialog::getOpenFileName(this,"Open File","","HTML files (*.html;*.htm)");
QFile file(absFileName);
if (file.open(QIODevice::ReadOnly)){
QTextStream out(&file);

do
{
szLine = out.readLine();

htmltostr(szLine);
//textEdit->(szLine);
}while( !szLine.isNull());

}

file.close();
}

void Parser::htmltostr(QString& htmstr)
{

Сюда приходит строка которую мне надо обработать!!!!!!!
}


Для каждой строки, как я понимаю надо вытянуть тег и текст который находится между им. Может кто посоветует чего?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fsMark
  опции профиля:
сообщение 19.11.2008, 16:55
Сообщение #25


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 23.4.2008
Из: г. Киров
Пользователь №: 155

Спасибо сказали: 10 раз(а)




Репутация:   1  


Помоему надо строить дерево отрожающее структуру HTML файла

Например:
<HTML>
текст
<br>
<b>
жырный текст
</b>
снова текст
</HTML>

Пример такого простейшего дерева приведен в прикрепленном файле, потом ты будешь обходить это дерево и отображать его.

Без такой древовидной структуры будет сложно учитывать вложенность тегов например для таблиц.

Сообщение отредактировал fsMark - 19.11.2008, 17:00
Эскизы прикрепленных изображений
 Р В Р’ Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 6%
Прикрепленное изображение
281 x 306 (7.38 килобайт)
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 19.11.2008, 17:34
Сообщение #26


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(bynet @ 19.11.2008, 10:59) *
Как из строки asd <h1>qwe</h2> удалить к примеру <h1> чтобы строка стала asd qwe</h2> fgh


QString.replace();
Месь, рекомендую покурить Ассистант. Он всегда поможет.

Цитата(bynet @ 19.11.2008, 16:09) *
Для каждой строки, как я понимаю надо вытянуть тег и текст который находится между им. Может кто посоветует чего?

Поищите в интернете букварь по патернам, а в букваре поищите "рекурсивная композиция" или погуглите по "рекурсивная композиция/рекурсивный спуск".
например тут: http://code.google.com/p/unnstudio/downloads/list

http://ru.wikipedia.org/wiki/Метод_рекурсивного_спуска
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.11.2008, 19:04
Сообщение #27


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(fsMark @ 19.11.2008, 19:55) *
Помоему надо строить дерево отрожающее структуру HTML файла
это DOM-подход, он сложен.

Цитата(bynet @ 19.11.2008, 15:38) *
Огромное спасибо, но мне минимум можно использовать стандартных функций. Все практически надо написать самому. Тоесть если строку парсить то надо написать свой парсер
это я понял, я и предлагаю тебе свой парсер написать, но несквозной. А в стиле SAX, т.е. ты создаешь свой класс обзываешь его к примеру MySAX. Интерфейс выглядит примерно так:
Интерфейс

#ifndef MYSAX_H
#define MYSAX_H

class QString;
class QFile;


/*!    SAX парсер.
 */
class MySAX
{


public:
    MySAX();
    ~MySAX();

    /*!    Загрузчик.
     *    
     *    Загружает файл в память и вызывает приватный метод start(), для анализа.
     *
     *    \param    file - файл для разбора.     
     *    \return    false - если неудалось загрузить файл или он неправильный.
     */
    bool load(const QFile &file);

    /*!    Обработчик открывающегося тэга.
     *    \param    tag - имя тэга.
     *    \param    text - текст следующий за тэгом (до символа "<").     
     *    \return    false - если необходимо прервать анализ.
     */
    virtual bool openTag(const QString &tag);

    /*!    Обработчик текста в нутри тэга.
     *    \param    text - текст следующий за тэгом (до символа "<").     
     *    \return    false - если необходимо прервать анализ.
     */
    virtual bool text(const QString &text);    
    
    /*!    Обработчик закрывающегося тэга.
     *    \param    tag - имя тэга.
     *    \return    false - если необходимо прервать анализ.        
     */
    virtual bool closeTag(const QString& tag);  

private:
    /*!    Сам синтаксический анализатор.
     */
    void start();

    int old_pos;
};

#endif //MYSAX_H



В функции start(), собственно парсере, ты ищещ тэги (закрывающий и открывающий).
Помере того как ты их находишь, вызываешь соответствующие методы. Например ты нашел открывающийся тэг, вызвал openTag(const QString &tag), в качестве аргумента передаешь имя тэга. Запоминашь позицию (номер символа)курсора сразу после тэга, ищешь слудющий тэг (или закрывающий или открывающий), когда нашел, то сначало берешь текст от запомненой позиции до текущей, передаешь его в text(const QString &text) затем вызываешь closeTag или openTag в зависимости от того какой тэг нашел. и т.д.

А вот заготовка реализации:
реализация

MySAX::MySAX()
{
}

MySAX::~MySAX()
{
}

bool MySAX::load(const QFile &file)
{
    if (!file.open(QIODevice::ReadOnly))
    {
        qDebug() << "Error: file " << file.fileName() << "is absent";
        return false;
    }

    qDebug() << "Open file: " << file.fileName();
    
    ...
    ...
    ...
    
}

bool MySAX::openTag(const QString &tag)
{
    qDebug() << "Open tag: " << tag;
}

bool MySAX::text(const QString &text)
{
    qDebug() << "\tIn tag text: " << text;
}

bool MySAX::closeTag(const QString &tag)
{
    qDebug() << "Close tag: " << tag;
}

void MySAX::start()
{
  QString    otag, ctag, text;
    
    // анализируем
    while(/*пока файл некончился*/)
    {
        ...
        // Нашли открывающийся тэг
        if (!openTag(otag))
            return;
        
        ...
        // Нашли закрывающийся тэг
        
            // читаем текст от старой позиции до новой
        text = ...;
        if (!text(text))
            return;
            
        if (!closeTag(ctag))
            return;
    }

}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 19.11.2008, 20:20
Сообщение #28


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Цитата(bynet @ 19.11.2008, 10:59) *
Как из строки asd <h1>qwe</h2> удалить к примеру <h1> чтобы строка стала asd qwe</h2> fgh


функцией remove.

Совет: Смотри ассистент.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 30.5.2025, 7:40