我已将网页从URL加载到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循环应该分别遍历每个节点-我在哪里出错?

最佳答案

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

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


否则,HAP将在整个HtmlDocument中搜索XPath,并在每次迭代中一次又一次返回第一个匹配的节点,这就是为什么您获得相同结果的原因。

关于loops - 使用HtmlAgilityPack选择SelectedNodes中的每个节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24711192/

10-16 05:19