Получить все, что находится между тегами
- C#

Узнай цену своей работы

Формулировка задачи:

Добрых времени суток. По адресу тык нужно вытянуть все что находится между тегом
<div id="content"> </div>
Делаю это так:
public void getLink(string html)
        {
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(html);
            string lk = doc.DocumentNode.SelectSingleNode("//*[@id='content']").InnerText;
            richTextBox1.Text = lk;           
        }
Строка имеет вид:
            Имя
			Грейд
			Физ.атака
			Маг атака
			скорость

			&nbsp;&nbsp;Меч новичка
			-
			30
			10
			360

			&nbsp;&nbsp;Короткий меч
			ВА
			40
			10
			360

			&nbsp;&nbsp;Длинный меч
			ВА
			50
			10
			360

			&nbsp;&nbsp;Добротный меч
			ВА
			60
			10
			360
......
Теперь из этой строки нужно получить подстроки и занести их в массив. Подстроки должны иметь вид:
"Имя" "Физ.атака" или "Маг.атака"
Если физ. атака больше маг.атаки выводится физ.атака и наоборот. С регулярками не очень дружу, вытянуть что-то простенькое из строки могу, а как быть тут не знаю. P.S. А можно как то сразу с сайта спарсить необходимые мне подстроки не используя регулярки?

Решение задачи: «Получить все, что находится между тегами
»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
 
namespace ConsoleApplication96
{
    class Weapon
    {
        public string Name { get; set; }
        public string Grade { get; set; }
        public int MAtk { get; set; }
        public int PAtk { get; set; }
        public int Speed { get; set; }
    }
    class Program
    {
        static void Main()
        {
            string text = File.ReadAllText("for.txt", Encoding.UTF8);
            var parse = Parse(text);
            foreach (Weapon weapon in parse)
            {
                Console.WriteLine("{0} {1} {2}", weapon.Name, weapon.Grade, Math.Max(weapon.PAtk, weapon.MAtk));
            }
        }
 
        private static IEnumerable<Weapon> Parse(string text)
        {
            var lines = text.Split(new[] {'\r','\n','\t'}, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < lines.Length; )
            {
                while (string.IsNullOrWhiteSpace(lines[i]))
                {
                    i++;
                    if (i == lines.Length)
                        yield break;
                }
                if (lines[i].Contains("Имя"))
                {
                    i += 5;
                    continue;
                }
                var weapon = new Weapon();
                weapon.Name = lines[i++].Replace(" ", "").Trim();
                weapon.Grade = lines[i++];
                weapon.PAtk = int.Parse(lines[i++]);
                weapon.MAtk = int.Parse(lines[i++]);
                weapon.Speed = int.Parse(lines[i++]);
                yield return weapon;
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы