Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
Заблокирован

Распарсить строку и получить значения между тегами

16.02.2015, 13:31. Показов 3676. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Строчка имеет такой вид
<tag>1</tag> <tag1>2</tag1>

Зак вытащить содержимое каждого тега?

Добавлено через 4 минуты
Получил я такую строчку
<tag1>...</tag1>
после
<tag>...</tag>
Как определить, мол если tag то направляем на эту функцию.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2015, 13:31
Ответы с готовыми решениями:

Распарсить текст и получить строку, которая находится между одинаковых тегов
Есть код и нужно спарсить данные в 3 колонки время. откуда и куда &lt;textarea name=&quot;id&quot; cols=&quot;50&quot;...

Распарсить HTML страницу для получения теста между тегами
Всем доброго времени суток. Имеется вот такой веб код, который я &quot;спарсил&quot; с со страницы : -0px...

Распарсить HTML страницу для получения теста между тегами
Собственно проблема заключается в том что не получается спарсить текст между тэгов, пробовал все возможные способы. Есть html код: ...

14
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
16.02.2015, 13:44
Gerd199, это весь текст "<tag>1</tag> <tag1>2</tag1>", возможно речь вообще про xml идет ?
0
Заблокирован
17.02.2015, 10:58  [ТС]
Переменная содержит строчку. Мне нужно понять когда эта строчка обромлена в <tag>1</tag>, а когда <tag1>1</tag1>. Ну и разобрать содержимое ,все то, что внутри тега. Как узнать это?

Добавлено через 1 час 31 минуту
Ну, да. Xml то, что нужно.

Добавлено через 19 часов 37 минут
string html = "<html><head>sss</head><div>sss</div></html>";
XDocument xDocument = XDocument.Load(html);

Code
1
завершилась с кодом -805306369 (0xcfffffff) 'Process was unresponsive and was terminated'.
Каждый раз программа сворачивается, зависает и тп. Почему, как разобрать html разметку?
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 11:04
Gerd199, в XDocument можно загрузить только полноценный xml документ. с заголовком и корнем
0
Заблокирован
17.02.2015, 11:11  [ТС]
HTML5
1
2
3
4
5
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Тест</title>
</head>

C#
1
2
3
4
XDocument xDocume = XDocument.Load(Code);
var vv = xDocume.Element("html").Element("head").Element("title").Value;
 
MessageBox.Show(vv , "Заголовок сообщения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
Не вытаскивает, почему?
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 11:36
Цитата Сообщение от Gerd199 Посмотреть сообщение
Не вытаскивает, почему?
потому-что это не xml, а html.
можно для html юзать htmlAgilityPack, он позволяет работать с документом в объектной манере

Добавлено через 7 минут
Gerd199, пример получаем все элементы title, и выводим текст на экран
C#
1
2
3
4
5
6
7
8
            var doc = new HtmlDocument();
            string str = File.ReadAllText("ht.html",Encoding.UTF8);
            doc.LoadHtml(str);
 
            foreach(var i in doc.DocumentNode.Descendants("title"))
            {
                Console.WriteLine(i.InnerText);
            }
в файле "ht.html" находится сама html разметка
HTML5
1
2
3
4
5
6
7
8
9
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Тест</title>
        <title2>Тест2</title2>
        <div>
        <title>Тест3</title>
    </div> 
</head>
0
Заблокирован
17.02.2015, 11:51  [ТС]
Блин, мне бы еще подключить библиотеку эту...

Скачиваю от сюда
http://htmlagilitypack.codeple... view/90925
Далее установлен фреймворк 4.5, беру из архива папку Net45. Из нее беру библиотеку HtmlAgilityPack.dll и кидаю ее в папку проекта. Дальше не знаю как эту библиотеку подключить к проекту


Прописываю следующим образом

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.IO;
using System.Data;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;
using System.Threading;
using System.Linq;
using System.Text.RegularExpressions;
using System.Text;
using System.Xml;
using System.Xml.Linq;
 
using HtmlAgilityPack;
using HtmlDocument = HtmlAgilityPack.HtmlDocument;
 
 
namespace test
{
 
    public partial class Form1 : Form
    {
        public string AppDir; // путь к папке приложения
        public char PointChar;
 
        public Form1()
        {
            // определение папки, в которой запущена программа
            string path = Application.ExecutablePath;
            AppDir = path.Substring(0, path.LastIndexOf('\\') + 1);
 
            // The InitializeComponent() call is required for Windows Forms designer support.
            InitializeComponent();
 
            // определение разделителя в числах на компьютере (запятая или точка)
            PointChar = ',';
            string str = (1.2).ToString();
            if (str.IndexOf('.') > 0) PointChar = '.';
 
        }
 
        
        void Form1Load(object sender, EventArgs e)
        {
                      
        }
 
         [DllImport("HtmlAgilityPack.dll")]
    }
}
Блин, ругается. Что не так я сделал?
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 11:54
достаточно сделать один юзинг (когда уже есть ссылка в referenc`ах)
длл импорт не нужен.
Кликните здесь для просмотра всего текста
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
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.IO;
using System.Data;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;
using System.Threading;
using System.Linq;
using System.Text.RegularExpressions;
using System.Text;
using System.Xml;
using System.Xml.Linq;
 
using HtmlAgilityPack;
 
namespace test
{
 
    public partial class Form1 : Form
    {
        public string AppDir; // путь к папке приложения
        public char PointChar;
 
        public Form1()
        {
            // определение папки, в которой запущена программа
            string path = Application.ExecutablePath;
            AppDir = path.Substring(0, path.LastIndexOf('\\') + 1);
 
            // The InitializeComponent() call is required for Windows Forms designer support.
            InitializeComponent();
 
            // определение разделителя в числах на компьютере (запятая или точка)
            PointChar = ',';
            string str = (1.2).ToString();
            if (str.IndexOf('.') > 0) PointChar = '.';
 
        }
 
        
        void Form1Load(object sender, EventArgs e)
        {
                      
        }
 
    }
}
0
Заблокирован
17.02.2015, 11:58
Цитата Сообщение от Metall_Version Посмотреть сообщение
Gerd199, в XDocument можно загрузить только полноценный xml документ. с заголовком и корнем
Metall_Version, просто вместо метода Load, нужно было использовать Parse, и тогда код Gerd199 будет рабочим:
C#
1
2
3
            string html = "<html><head>sss</head><div>sss</div></html>";
            XDocument xDocument = XDocument.Parse(html);
            Console.WriteLine(xDocument);
Code
1
2
3
4
<html>
  <head>sss</head>
  <div>sss</div>
</html>
P.S. Заголовок не обязателен
1
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 12:01
и вот это
C#
1
2
string path = Application.ExecutablePath;
            AppDir = path.Substring(0, path.LastIndexOf('\\') + 1);
я бы заменил на
C#
1
2
            var currentDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);  // текущая папка приложения
            AppDir = Directory.GetParent(currentDir).ToString();
Добавлено через 1 минуту
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
P.S. Заголовок не обязателен
не знал. знаю что как минимум корень должен быть.
0
Заблокирован
17.02.2015, 13:06  [ТС]
Дело в том, что "using HtmlAgilityPack;", программа подсвечивает как ошибку. Значит нужен импорт dll.

Почему "[DllImport("HtmlAgilityPack.dll")]", подсвечивает как ошибку. Тоже не понятно...

Добавлено через 7 минут
Хотел добавить ссылку в референцах.
- Видать у меня фремворк 3.5, это получается что не Net45 , а sl3-wp папка нужна из архива?
-Что еще за ссылку добавлять нужно, непонятно как это сделать...
Миниатюры
Распарсить строку и получить значения между тегами  
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 13:09
Gerd199, сделай ссылку на dll (там есть папка net20), если у тебя фреймворк 3,5
1
Заблокирован
17.02.2015, 13:32  [ТС]
Сделал, вроде как все получилось. Но
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                    string html = "<html><head>sss</head><div class='eTitle'>sss</div></html>";
                    HtmlDocument HD = new HtmlDocument();
                    var web = new HtmlWeb
                    {
                       AutoDetectEncoding = false,
                       OverrideEncoding = Encoding.UTF8,
                    };
                    HD = web.Load(html);
  
                    HtmlNodeCollection NoAltElements = HD.DocumentNode.SelectNodes("//div[@class='eTitle']");
 
                    if (NoAltElements != null)
                    {
                        foreach (HtmlNode HN in NoAltElements)
                        {
                            MessageBox.Show(HN.InnerText, "Заголовок сообщения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        }
                    }


При запуске функции, программа завершает свою работу.
C#
1
2
         возникло в System.dll, но не было обработано в коде пользователя
Дополнительные сведения: Недопустимый URI: Невозможно определить формат URI.
На сколько я понимаю, мне не нужно загружать url. Поскольку хтмл код в переменной.
Как я сейчас не пытался исправить, то тут ошибка то там ошибка.

Как правильно построить эту часть кода?
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
                    var web = new HtmlWeb
                    {
                       AutoDetectEncoding = false,
                       OverrideEncoding = Encoding.UTF8,
                    };
                    HD = web.Load(html);

Нет необходимости загружать html страницу из нета. Html разметка уже в переменной присутствует и по моему в нужной кодировке...
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 13:40
Gerd199, вы смотрели пример ? зачем создавать лишний HtmlWeb.

C#
1
     doc.LoadHtml(html);
1
Заблокирован
17.02.2015, 13:52  [ТС]
Да, да, я уже решил. Сейчас буду разбираться с разметкой.

Добавлено через 8 минут
На странице две таблицы
C#
1
2
3
4
HtmlNodeCollection NoAltElements = doc.DocumentNode.SelectNodes("//table //tr"); 
foreach (HtmlNode HN in NoAltElements){
      MessageBox.Show(HN.InnerText);
}
Так переберем все строчки , из первой и из второй.

Если я правильно понимаю, NoAltElements содержит массив. Как его рекурсивно перебрать так, чтобы в цикле начать с последней строчки и закончив первой. Только первой таблицы... Есть ли такая функция по рекурсии...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2015, 13:52
Помогаю со студенческими работами здесь

Втсавить строку между тегами
Как вставить строку между тегами? Исходные данные: 'field' =&gt; '&lt;select id=&quot;rubriks&quot; name=&quot;board&quot;&gt;&lt;/select&gt;'В ф-ии,...

Получить текст между тегами
Здравствуйте. Необходимо получить между ббкодами code, делаю так: preg_match_all('/\(.*?)\/', $subject, $bb_code); это работает, но...

Получить текст между тегами
Пожалуйста помогите выбрать текст между тегами ( bbcode сообщения из БД) Вот, что получаю из БД: ...

Получить текст между тегами
Надо получить текст между тегами, которые выделены полосками &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta...

Получить текст между тегами
Всем привет Экспериментировал с php и потребовалось получить текст между тегами, к примеру, между: и , методом проб и ошибок пришел к...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru