C# SelectSingleNode在foreach上返回错误的结果

C# SelectSingleNode在foreach上返回错误的结果,c#,.net-4.0,html-parsing,html-agility-pack,C#,.net 4.0,Html Parsing,Html Agility Pack,我正在尝试解析一个HTML的结果,它是foreach的初始节点,它的工作方式与预期的一样,并给我一个10个匹配我需要的项目的结果 当我进入foreach时,如果我输出数据项的内部html,它将显示正确的数据,但如果我输出SelectSingleNode,它将始终显示foreach中第一个项目的数据,这是正常行为还是我做错了什么? 为了解决这个问题,我必须在foreach中为每个数据项创建一个新的html,如下所示: HtmlAgilityPack.HtmlDocument doc = new H

我正在尝试解析一个HTML的结果,它是foreach的初始节点,它的工作方式与预期的一样,并给我一个10个匹配我需要的项目的结果

当我进入foreach时,如果我输出数据项的内部html,它将显示正确的数据,但如果我输出SelectSingleNode,它将始终显示foreach中第一个项目的数据,这是正常行为还是我做错了什么?

为了解决这个问题,我必须在foreach中为每个数据项创建一个新的html,如下所示:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);

var nodes = doc.DocumentNode.SelectNodes("//div[@class=\"noprint res\"]/div");
if (nodes != null)
{
    foreach (HtmlNode data in nodes)
    {
                  // Works but not what I want
                  MessageBox.Show(data.InnerHtml);

                  // Should work ? but does not ?
                  MessageBox.Show(data.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
    }
}
然后我得到正确的每项数据

我试图从中获取数据的页面是,如果你想尝试看看自己会发生什么


基本上,我是在阅读左侧列中的公司名称,上面发生了这种情况。

通过使用
/
启动XPath表达式,可以在包含
数据的整个文档中进行搜索


您应该能够使用
“//[…]”
仅检查
数据中的节点

,但是数据节点只有foreach项,这是错误的吗?因为当我使用data.InnerHtml时,它确实会显示其中的确切数据,并且我从数据节点中选择的项目没有重复项。以“/”开头表示您没有在数据中搜索,而是在data.OwnerDocument中搜索。data.OwnerDocument对于所有数据节点都是相同的。
HtmlAgilityPack.HtmlDocument innerDoc = new HtmlAgilityPack.HtmlDocument();
innerDoc.LoadHtml(data.InnerHtml);

// Select what I need
MessageBox.Show(innerDoc.DocumentNode.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);