使用HtmlAgilityPack选择SelectedNodes中的每个节点

时间:2014-07-12 08:37:42

标签: loops xpath iteration html-agility-pack

我已将网页从网址加载到HtmlDocument

使用var nodes = htmlDocument.DocumentNode.SelectNodes("//li[@class='myLi']");
我可以获得25个节点的Count

但是,当我使用:

迭代节点时
foreach (HtmlNode htmlNode in nodes)
{
    SomeList.Add(htmlNode.SelectSingleNode("//span[@class='user']").InnerText.Trim());
}

我在列表中得到了25个相同的结果 我非常确定foreach循环应该分别遍历每个节点 - 我哪里出错了?

1 个答案:

答案 0 :(得分:2)

告诉HtmlAgilityPack您的XPath范围仅限于当前htmlNode,您需要在XPath的开头添加一个点/句点(。):

foreach (HtmlNode htmlNode in nodes)
{
    SomeList.Add(htmlNode.SelectSingleNode(".//span[@class='user']").InnerText.Trim());
}

否则,HAP将在整个HtmlDocument内搜索XPath,并在每次迭代中一次又一次地返回第一个匹配的节点,这就是为什么你得到那些相同的结果。< / p>