我有一个<ul> <li>列表,我可以从中提取数据,但是<li>的数字是根据站点动态变化的。

这是我的代码;

HtmlNode dordunculi = doc.DocumentNode.SelectSingleNode("//ul[@class='InfoList']/li[4]/span");


在执行某些操作之前,如何检查/li[4]是否存在,我知道我需要使用contains但无法弄清楚。

谢谢。

最佳答案

在进行进一步处理之前,请检查SelectSingleNode()是否返回值,例如:

HtmlNode dordunculi = doc.DocumentNode.SelectSingleNode("//ul[@class='InfoList']/li[4]/span");
if(dordunculi)
{
    //do something with `dordunculi`
    Console.WriteLine(dordunculi.InnerText);
}


或者,使用C#6.0,您可以使用方便的null传播运算符:

Console.WriteLine(dordunculi?.InnerText);


注意,如果没有元素与整个XPath匹配,XPath只会返回空。例如,在未找到/li[4]/span的情况下,li[4]仅返回空,不存在获取NRE的风险。因此,如果您没有特定意图进行检查但避免使用NRE,则不必这样做。

09-04 23:26