Html Agility Pack получает имя класса span в html - PullRequest
0 голосов
/ 30 апреля 2018

Я могу получить разделы компания-сотрудник-идеи-элементы; однако, когда я пытаюсь получить имя класса для определенного диапазона в графике статистики, он всегда возвращает сотрудника-уменьшение. На странице имеется несколько разделов с одинаковым именем раздела (в формате списка сверху вниз), как в примере ниже.

Мне нужно вытащить имя класса из диапазона в графике статистики. В некоторых случаях его сотрудник - уменьшение или увеличение сотрудника.

Мне также нужен текст Car Center, поэтому я начинаю с пункта company-employee-insights-item.

Не могу понять наш лучший способ изолировать текущий диапазон в элементе For Each. Это то, что я имею до сих пор; но каждый раз, когда он возвращает сотрудника, уменьшается.

Dim ndes As Array = html.DocumentNode.SelectNodes("//*[contains(@class,'company-employee-insights-item')]").ToArray

    Dim result As String = String.Empty
                For Each item As HtmlNode In ndes

                    Dim nde As HtmlNode = item.SelectSingleNode("//*[contains(@class,'graph-stats')]/span")

                    Dim s As String = HttpUtility.HtmlDecode(item.OuterHtml.Trim)
                    result = result & s & " " & nde.Attributes(0).Value & "<br/>"

                Next

Вот пример HTML-кода с двумя разделами, на которых может быть X разделов на странице.

<section class="company-employee-insights-item">
            <dl>
              <dt>
                Car Center
                <span class="employee-counter">
                  (203)
                </span>
              </dt>
              <dd class="graph-stats">
                  <span class="employee-decrease">
                    <li-icon aria-hidden="true" type="caret-filled-down-icon"><svg></path></svg></li-icon>
                    3%
                  </span>
              </dd>
            </dl>
</section>

<section class="company-employee-insights-item">
            <dl>
              <dt>
                Truck Center
                <span class="employee-counter">
                  (203)
                </span>
              </dt>
              <dd class="graph-stats">
                  <span class="employee-increase">
                    <li-icon aria-hidden="true" type="caret-filled-down-icon"><svg></path></svg></li-icon>
                    3%
                  </span>
              </dd>
            </dl>
</section>

1 Ответ

0 голосов
/ 30 апреля 2018

Похоже, что требуемый узел можно описать, всегда имея <dd> со значением class graph-stats и дочерний элемент <span> со значением class , начиная с employee-, так что это работает:

Dim document = New HtmlDocument
Dim xpath = "//dd[@class='graph-stats']/span[starts-with(@class, 'employee-')]"
document.LoadHtml(html)
For Each dd In document.DocumentNode.SelectNodes(xpath)
    Console.WriteLine(dd.Attributes("class").Value)
Next
...