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

The*_*kZn 1 iteration xpath loops html-agility-pack

我已将网页从 URL 加载到HtmlDocument

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

但是,当我使用以下命令迭代节点时:

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

我在列表中得到 25 个相同的结果。
我很确定foreach 循环应该单独迭代每个节点 - 我哪里出错了?

har*_*r07 5

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

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

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