使用HTML Agility Pack的XPath查询问题

时间:2011-05-12 15:43:23

标签: c# xpath html-agility-pack

我正在尝试使用HTML Agility Pack从this website中删除价格字段。

我的代码如下;

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

我使用Firebug的“复制为XPath ”功能获得了XPath查询。

我遇到的问题是 SelectSingleNode 正在返回 null - 它似乎找不到查询指定的元素。我有点难以理解为什么,但我对XPath没有多少经验,所以我会对我做错了一些指点。

2 个答案:

答案 0 :(得分:3)

当发生这种情况时,您应该检查页面是否正确加载(您说您是通过HTTP代理?)

尝试将doc.DocumentNode.OuterHtml的内容写入文本文件,以便查看页面是否正确加载。也许你得到一个错误页面而不是原始页面。

答案 1 :(得分:1)

如果我运行此代码:

    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标记。