C# вопрос по AngleSharp

293
07 августа 2018, 22:50

Нужная мне информация для парсинга храниться например в таком виде

<div class="rSide">
    <tr class="temperature">
       <td class="p1 ">+15°</td>
       <td class="p2 bR ">+14°</td>
       <td class="p3 ">+13°</td>
       <td class="p4 bR ">+16°</td>
       <td class="p5 ">+21°</td>
       <td class="p6 bR ">+23°</td>
       <td class="p7 cur">+21°</td>
       <td class="p8 ">+18°</td>
    </tr>
</div>

Каким образом парсить информацию о температуре , если div с класом rSide - единственный в документе, когда как тегов tr с класом temperature - много.

Answer 1

Как-то так:

var parser = new HtmlParser();
var document = parser.Parse(@"
<div class='rSide'>
    <table>
        <tr class='temperature'>
           <td class='p1 '>+15°</td>
           <td class='p2 bR '>+14°</td>
           <td class='p3 '>+13°</td>
           <td class='p4 bR '>+16°</td>
           <td class='p5 '>+21°</td>
           <td class='p6 bR '>+23°</td>
           <td class='p7 cur'>+21°</td>
           <td class='p8 '>+18°</td>
        </tr>
        <tr class='temperature'>
           <td class='p1 '>+16°</td>
           <td class='p2 bR '>+15°</td>
           <td class='p3 '>+14°</td>
           <td class='p4 bR '>+17°</td>
           <td class='p5 '>+22°</td>
           <td class='p6 bR '>+24°</td>
           <td class='p7 cur'>+22°</td>
           <td class='p8 '>+19°</td>
        </tr>
    </table>
</div>
");
var temperaturesElements = document.QuerySelectorAll("div.rSide table tr.temperature");
foreach (var element in temperaturesElements)
{
    var p1 = element.QuerySelector("td.p1").Text();
    var p2 = element.QuerySelector("td.p2").Text();
    var p3 = element.QuerySelector("td.p3").Text();
    var p4 = element.QuerySelector("td.p4").Text();
//  $"p1={p1}".Dump();
//  $"p2={p2}".Dump();
//  $"p3={p3}".Dump();
//  $"p4={p4}".Dump();
//  "".Dump();
}

Вывод linqpad:

Два замечания.

  1. Вероятно вам неплохо бы объявить класс в котором бы держать p1...pN - но это уже сами.
  2. @Андрей NOP уже сказал, что приведённый html-код невалиден, добавлю. Я уже как-то указывал при ответе кому-то по тегу anglesharp что невалидный код не распознается. Вы будете долго и упорно дебажить - но ни за что не догадаетесь в чём ошибка. Я как-то раз пару часов убил на совершенно тривиальный пример.

И ещё. Не ленитесь, почитайте по тегу вопросы ранее заданные на ru so - ведь по anglesharp абсолютно однотипные вопросы, нужно лишь понимать селекторы дом.

READ ALSO
C# WPF MVVM MenuItem Template

C# WPF MVVM MenuItem Template

Как изменять Template для MenuItem на топ уровне?

171
Кодировать в base64

Кодировать в base64

Есть байтовый массив byte[] FileМне надо закодировать в base64, я делаю это так

150
Unity3D: Баги в простейшей 2D игре

Unity3D: Баги в простейшей 2D игре

Написал недавно простую 2D игру на UnityЕсли запускать в редакторе Unity, то все нормально, а если на телефоне, то появляются фризы и неплавности...

145
Получение массива из json. c# Unity

Получение массива из json. c# Unity

Получаю с сайта json который содержит кучу массивов и свойств по типу =>

159