HTMLAgilityPack选择具有不同Xpath ID C#的多个节点

时间:2018-07-06 09:07:18

标签: c# html html-agility-pack

我正在使用HTMLAgilityPack从亚马逊提取Digital Media表,这是我的工作。 xpath显示它们都有不同的ID示例:

    //*[@id="result_0"]/td[2]/div/a
   //*[@id="result_1"]/td[2]/div/a
   //*[@id="result_2"]/td[2]/div/a

因此,除非周围没有其他地方,否则我不能随便使用selectNodes吗? 目前我正在这样做,但这似乎不正确吗?

        var doc = web.Load("https://www.amazon.co.uk/s/ref=nb_sb_noss?url=search-alias%3Ddigital-music&field-keywords="+txtInput.Text+"&page="+nowNum+"");

     for (int i = 0; i < 50; i++)
        {
         try
             {
                node = doc.DocumentNode.SelectSingleNode("//*[@id=\"result_"+i+"\"]/td[2]/div/a").InnerText;
             }
        catch (exception)
        {
        throw;
        }
    }

我做的方式有什么问题吗?还是有一种方法可以使用selectNodes,而不必使用具有不同ID的这些Xpath分别选择每个节点?

谢谢 蚂蚁

1 个答案:

答案 0 :(得分:0)

您可以使用SelectNodes来研究start-with

var nodes = doc.DocumentNode.SelectNodes("//*[start-with(@id, 'result_')]/td[2]/div/a");

这样,您将获得所有result_X节点,我相信这样做会更好,因为您的for循环假定有50个结果。
希望对您有帮助。