如何使用htmlagilitypack从子节点获取所有价值?

时间:2019-05-28 06:11:08

标签: c# html-agility-pack

如何从子节点获取价值,例如href值,并使用具有父节点类名称的html agility pack将它们添加到列表中?

我尝试了此代码,但失败了

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 个答案:

答案 0 :(得分:1)

要具体获得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的{​​{1}}值的值
  6. 过滤掉具有空值的链接(例如提交的HTML中的第一个