首页 > 解决方案 > 重复循环不会遍历所有元素

问题描述

我在节点集合中使用重复循环,但是输出并且始终是 foreach 的第一个输入...

var all_accounts_elements = content.GetCollectionNode(
    "//div[@class='box-list-item text-c js-list-item']");

foreach (HtmlNode account_element in all_accounts_elements)
{
    //for debug only
    var copy = account_element;

    var account = new InstagramAccount();

    //for debug only
    var debug = copy.SelectSingleNode("//*[@class='title']");
    Debug.WriteLine(debug.InnerText);

    account.AccountName = account_element.SelectSingleNode("//*[@class='title']")
        .InnerText.ToTilteCase().Trim();
    account.AddedData = account_element.SelectSingleNode("//*[@class='sub']")
        .InnerText.Trim();
    account.Edit = account_element.SelectSingleNode("//*[@class='context-menu']")
        .InnerText.Trim();
    account.Message = account_element.SelectSingleNode("//*[@class='quick-info']")
        .InnerText.Trim();

    accountsList.Add(account);

}

集合:在此处输入图像描述

第一个元素:在此处输入图像描述

第二个元素:在此处输入图像描述

输出:

jonisbarcelos
jonisbarcelos

标签: c#

解决方案


您的 XPath 选择器告诉 HTMLAgilityPack 查看整个文档。尝试查看后代:

account.AccountName = account_element.SelectSingleNode("descendant::div[@class='title']")
    .InnerText.ToTilteCase().Trim();
account.AddedData = account_element.SelectSingleNode("descendant::div[@class='sub']")
    .InnerText.Trim();
account.Edit = account_element.SelectSingleNode("descendant::div[@class='context-menu']")
    .InnerText.Trim();
account.Message = account_element.SelectSingleNode("descendant::div[@class='quick-info']")
    .InnerText.Trim();

推荐阅读