Проблема запроса XPath с использованием HTML Agility Pack - PullRequest
2 голосов
/ 12 мая 2011

Я пытаюсь очистить поле цены от этого сайта , используя пакет Agility HTML.

Мой код выглядит следующим образом;

var web = new HtmlWeb();
var doc = web.Load(String.Format(overClockersURL, componentID));
var priceContent = doc.DocumentNode.SelectSingleNode("//*[@id=\"prodprice\"]");

Я получил запрос XPath с помощью функции Firebug « Копировать как XPath ».

Проблема, с которой я столкнулся, заключается в том, что SelectSingleNode возвращает null - кажется, он не находит элемент, указанный в запросе. Я немного озадачен тем, почему, но у меня нет большого опыта работы с XPath, поэтому буду признателен за некоторые подсказки относительно того, что я сделал неправильно.

Ответы [ 2 ]

3 голосов
/ 18 мая 2011

Когда это происходит, вы должны проверить, правильно ли загружается страница (вы сказали, что используете HTTP-прокси?)

Попробуйте записать содержимое doc.DocumentNode.OuterHtml в текстовый файл, чтобы вы моглипосмотрите, правильно ли загружается страница.Возможно, вы получаете страницу с ошибкой вместо исходной страницы.

1 голос
/ 12 мая 2011

Если я запускаю этот код:

    var web = new HtmlWeb();
    var doc = web.Load("http://www.overclockers.co.uk/showproduct.php?prodid=GX-033-HS");
    var priceContent = doc.DocumentNode.SelectSingleNode("//*[@id=\"prodprice\"]");
    Console.WriteLine("price=" + priceContent.InnerHtml);

Он выводит:

price=529.99

Так что, похоже, работает.Вы также можете использовать //span[@id=\"prodprice\"]", что лучше, так как позволяет избежать всех тегов, отличных от SPAN.

...