尝试使用Html Agility Pack获取单个节点

时间:2013-01-18 23:27:30

标签: c# html html-agility-pack

在找到带有特定标记的htmlnode后,我正试图获取单个节点。 但我得到的是一个错误:

  

对象引用未设置为对象的实例。

现在这里是代码:

HtmlWeb htmlWeb = new HtmlWeb();
// Creates an HtmlDocument object from an URL
HtmlAgilityPack.HtmlDocument document = htmlWeb.Load(url);
// Targets a specific node
// If there is no node with that Id, someNode will be null
HtmlNode someNode = document.GetElementbyId("<li name=\"XU\">");
var parseString = someNode.SelectSingleNode("//span[@class='lp']");

我的目的是获取XU li标签内的所有节点。我知道班级的名字。

另外请注意,当我用

替换最后一个代码行时
var parseString = document.DocumentNode.SelectSingleNode("//span[@class='long-position']");

然后SelectSingleNode中的tag参数工作正常。

2 个答案:

答案 0 :(得分:0)

在您的代码中......

HtmlNode someNode = document.GetElementbyId("<li name=\"XU\">");

...可能会返回null ...然后调用:

var parseString = someNode.SelectSingleNode("//span[@class='lp']");

...抛出该异常,因为someNode为null。

试试这个:

HtmlNode someNode = document.GetElementbyId("XU");

if (someNode != null)
{
    var parseString = someNode.SelectSingleNode("/span[@class='lp']");
    // ...

答案 1 :(得分:0)

HtmlNode someNode = document.SelectSingleNode("//li[@name='XU']").SelectSingleNode("/span[@class='lp']");