Как я могу получить все значения от дочернего узла, используя htmlagilitypack? - PullRequest
0 голосов
/ 28 мая 2019

Как я могу получить значение из дочернего узла, например значение href, и добавить их в список, используя пакет гибкости html с именем класса родительского узла?

Я пробовал этот код, но не смог

var pagedivs = htmlDocument.DocumentNode.SelectNodes("div").Where(e => e.GetAttributeValue("class", "").Equals("pagination"))
                .Where(k => k.Descendants().Any(t => t.Name == "li")).ToList();

HTML-код в сети:

<div class="pagination">
        <ul class="pagination-list">
            <li class="hidden-phone current"><a title="1" href="" class="pagenav">1</a></li>
            <li class="hidden-phone"><a title="2" href="/collections/remarkable-products?page=2" class="pagenav">2</a></li>
            <li><a title="Next page" href="/collections/remarkable-products?page=2" class="pagenav"><i class="fa fa-chevron-right"></i></a></li>
        </ul>
        <input type="hidden" name="limitstart" value="0">
    </div>

1 Ответ

1 голос
/ 28 мая 2019

Чтобы получить значение href конкретно, вы можете сделать что-то вроде этого:

var links = document.DocumentNode
    .Descendants("div") // 1
    .Where(div => div.HasClass("pagination")) // 2
    .First() // 3
    .Descendants("a") // 4
    .Select(a => a.GetAttributeValue("href", "")) // 5
    .Where(link => !string.IsNullOrWhiteSpace(link)) // 6
    .ToList();
  1. Получить всех потомков div с.Это включает в себя как детей , так и детей детей
  2. Оставьте только div, который имеет класс pagination
  3. Выберите первый div, который соответствует нашим критериям
  4. Еще раз получить всех потомков, но на этот раз a s
  5. Получить значение a s href значение
  6. Отфильтровать ссылки с пустыми значениями(как первый в представленном HTML
...