Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 16
1

Вытащить текст между тегов html

19.07.2012, 17:35. Просмотров 3240. Ответов 8
Метки нет (Все метки)

Здравствуйте, форумчане!
Нужно вытащить текст между тегами.
Из этого:
HTML5
1
2
3
<html>
    <tag1>Текст 1</tag1>
<html>
Должно получиться:
HTML5
1
Текст 1
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2012, 17:35
Ответы с готовыми решениями:

Вытащить текст из тегов
Привет. Помогите решить проблему или подтолкните к решению... В общем есть текстовый файл с хтмл...

Как вытащить текст из тегов?
&lt;a class=&quot;synonim&quot; href=&quot;/dict/безошибочно&quot;&gt;безошибочно&lt;/a&gt; делаю find('a',0)-&gt;innertext не...

Как вытащить текст со Html странички? Html Agility Pack
Всё очень просто как вытащить текст с Html странички с помощью Html Agility Pack? К примеру у нас...

Обернуть текст без тегов в HTML
Здравствуйте. Задача: Есть какой-то HTML, ну к примеру: &lt;center&gt; &lt;label...

8
866 / 764 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
19.07.2012, 19:21 2
http://liveworkspace.org/code/... 5551913b25

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main(void)
{
 
    char str[] = {"<html>\n<tag1>Текст 1</tag1>\n<html>"};
    char *s, st[ 50 ], *pst;
    pst = st, s = str;
    int count = 0;
 
    while ( *s )
    {
        if ( *( s - 1 ) == '>' )
                 count ++;
        if ( count > 1 )
                 *pst++ = *s;
        if (  count == 2 && *( s + 1 )== '<' )
                break;
        s++;
     }
    printf  ( "%s\n", st  );
 
return 0;
}
1
4028 / 2318 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.07.2012, 21:08 3
MrCold, а зачем так жестко привязывать к количеству тегов?
Вот такую строчку уже не схарчит: "<html>\n<tag1>Текст 1<&> текст 2</tag1>\n<html>"
0
Эксперт С++
4251 / 2225 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.07.2012, 21:12 4
Со знаками знаками > и < тоже внимательно надо, а то такое
<tag1> 1 + 1 > 1 </tag1>
уже не так считает
0
2551 / 1316 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.07.2012, 21:15 5
Задание слишком размытое, имхо. Не показано, что нужно вытащить в общем случае. Как только задание прояснится, можно будет смело регуляркой пройтись.
0
866 / 764 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
19.07.2012, 21:32 6
Цитата Сообщение от BRcr Посмотреть сообщение
а зачем так жестко привязывать к количеству тегов
Цитата Сообщение от Thinker Посмотреть сообщение
Со знаками знаками > и < тоже внимательно надо
Оринтировался только на текст от ТC

Цитата Сообщение от soon Посмотреть сообщение
Задание слишком размытое
0
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
19.07.2012, 22:23 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251); SetConsoleOutputCP(1251);
 
    char str[1000];
    char str_out[1000];
    int j, k=0;
 
    cout << "Введите строку:" << endl;
    cin.getline(str, 1000);
 
 
    for (int i=0; i<strlen(str)-1; i++)
    {
        j = i;
 
        if ( (str[i] == '>') && (str[i+1] != '/'))
        {
            // удалить лишние пробелы, табуляции и новые строки  перед строкой
            while ( (str[j+1] == ' ') || (str[j+1] == '\t') || (str[j+1] == '\n') )
                j++;
 
            while (str[++j] != '<')
                str_out[k++] = str[j];
        }
    }
 
    cout << str_out << endl;
 
 
    system("pause");
    return 0;
}
1
Миниатюры
Вытащить текст между тегов html  
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
20.07.2012, 00:53 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>
 
 
int main() {
   std::string const page =
      "<html>"
         "<head>"
            "<title>Some title</title>"
         "</head>"
         "<body>"
            "<tag>Some content</tag>"
         "</body>"
      "</html>";
   std::string const tag = "tag";
   std::string text;
   
   std::string const opening = "<" + tag + ">";
   std::string const closing = "</" + tag + ">";
   std::string::size_type begin = page.find(opening);
   if (begin != std::string::npos) {
      begin += opening.length();
      std::string::size_type end = page.find(closing, begin);
      if (end != std::string::npos) {
         text = page.substr(begin, end - begin);
      }
   }
   
   std::cout << text << std::endl;
}
http://liveworkspace.org/code/... 1d92e3b582

Добавлено через 36 минут
Если тег не один, то можно как нибудь так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>
 
#include <boost/regex.hpp>
 
 
int main() {
   std::string const page =
      "<html>"
         "<head>"
            "<title>Some title</title>"
         "</head>"
         "<body>"
            "<tag>Some content</tag>"
            "<another tag>"
               "<tag>Content</tag>"
            "</another tag>"
            "<tag>Another content</tag>"
         "</body>"
      "</html>";
   std::string const tag = "tag";
   std::string text;
   
   boost::regex regex("<" + tag + ">(.*?)</" + tag + ">");
   for (boost::sregex_iterator it(page.cbegin(), page.cend(), regex); it != boost::sregex_iterator(); ++it) {
      std::cout << (*it)[1] << std::endl;
   }
 
   std::cout << text << std::endl;
}
http://liveworkspace.org/code/... ee297e2f6a
2
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 16
20.07.2012, 03:47  [ТС] 9
gray_fox, это то что нужно, спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2012, 03:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Распарсить текст между тегов
После запроса получаю ответ. Как его можно распарсить в листвью и занести Название - значение ?...

Взять текст между тегов
Вобшем есть &lt;td valign=&quot;top&quot; class=&quot;key&quot;&gt; &lt;span class=&quot;editlinktip hasTip&quot;...

Выводить только текст без тегов HTML
Очень плохо разбираюсь с шаблонами, а именно их составление... Написал такое:...

Как из двух html тегов получить текст
Друзья, такой вопрос есть html страница из которой надо извлечь текст между находящийся между...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.