Member 12268183 Ответов: 1

Как взять информацию из HTML-файла в C#?


- Привет!

Я хотел бы создать одну строку a[4] из span class="c" и class="c2". a[0] = class="c"; a[1] = 0; a[2] = class="c2".
В настоящее время моя строка содержит только a[1] и a[2]. Пожалуйста, помогите?

Вот пример html кода:


<div class="a">

<div class="b">
<span class="c">...
</span>
</div>


<div class="b1">...
</div>

<div class="b2">...
<span class="c">
</span>
</div>


</div>


Что я уже пробовал:

var inner1 = doc.DocumentNode.SelectSingleNode("//div[@ class='a']");

var nodes3 = inner1.SelectNodes("//span[@ class='c']");

foreach (HtmlAgilityPack.HtmlNode item3 in nodes3)
                {
                    shipping_flag[i4] = item3.InnerText;
                   

                    shipping_array = (string[])shipping_flag.ToArray();
                    i4++;


                }

1 Ответов

Рейтинг:
7

Liktor Janos

Я постараюсь помочь вам, однако я немного озадачен вашим объяснением и вашим блоком foreach.
Чего вы хотите достичь?
Извлечь все элементы SPAN в массив?
Пересчитать их?

РЕДАКТИРОВАТЬ:
Ладно, кажется, я понял. Я надеюсь, по крайней мере :)
Просто чтобы быть уверенным, вы хотите получить такой выходной массив:

string[] shipping_array = new string[]
{
    "class=""c""",
    "0",
    "class=""c2""",
    null //why did not you define this item?
};

Это кажется немного непоследовательным, однако я не знаю предыстории.
Итак, мои следующие вопросы::
* Откуда берется символ " 2 " в третьем элементе массива? Это счетчик найденных классов "с"?
* Вы не определили четвертый элемент массива. Почему? Есть ли разница между короткими промежутками?

РЕДАКТИРОВАТЬ:
Попробуйте что-нибудь подобное:
var results = new List<string>();
var divs = doc.DocumentNode.SelectNodes("//div");
foreach (var div in divs)
    results.Add(div.SelectNodes("span[@class='c']") == null ? "0" : "class=\"c\"");


Member 12268183

Спасибо за ваш ответ. Я хотел бы извлечь все элементы span в массив. Второй div не имеет пролета. Я хотел бы массив должен выглядеть следующим образом: {продолжительность = "с", 0, пролет = "с"}, следующий HTML код.

Member 12268183

Да, я хотел бы получить от вас выходной массив, подобный упомянутому выше. Символ "2" в третьем элементе массива является ошибкой. Третий элемент не имеет символа "2". Я не определил четвертый элемент. Это тоже ошибка. Прошу прощения!

Member 12268183

Я хотел бы извлечь пролеты из каждого div последовательно. Когда один div не имеет элемента span, я хотел бы установить этот элемент в 0.

Liktor Janos

О, я почти забыл: а как насчет внешнего DIV? У этого есть span class="c" дочерний элемент, хотя и не как прямые потомки. Что тебе нужно от этого дива? Добавьте в массив как "class=\"c\"" или добавьте как "0". Более того, когда вы хотите добавить его, на открывающем или закрывающем узле?