我已将网页从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/