首页 > 解决方案 > HTMLAgilityPack 选择具有不同 Xpath ID C# 的多个节点

问题描述

我正在使用 HTMLAgilityPack 从 Amazon 中提取数字媒体表,这是我的工作。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 单独选择每个节点?

谢谢蚂蚁

标签: c#htmlhtml-agility-pack

解决方案


您可以查看start-with,这样您可以使用SelectNodes

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

这样你就可以得到所有的result_X节点,我相信这会更好,因为你的 for 循环假设有 50 个结果。
希望这对您有所帮助。


推荐阅读