HTMLAgilityPack выбор нескольких узлов с разными идентификаторами Xpath C # - PullRequest
0 голосов
/ 06 июля 2018

Я использую HTMLAgilityPack для извлечения таблицы Digital Media из Amazon, это для моей работы. Xpath показывает, что все они имеют разные идентификаторы, например:

    //*[@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 вместо того, чтобы выбирать каждый из них по отдельности, используя эти Xpath с разными идентификаторами?

Спасибо Ant

1 Ответ

0 голосов
/ 06 июля 2018

Вы можете посмотреть , начиная с , таким образом, вы можете использовать SelectNodes:

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

Таким образом, вы получаете все узлы result_X, я считаю, что это лучше, потому что ваш цикл for предполагает 50 результатов.
Надеюсь, это поможет вам.

...