函数获取旧变量(HtmlAgilityPack)

时间:2012-10-21 17:55:25

标签: c# .net html html-agility-pack

当我尝试使用带有少量函数的foreach来从HTML获取文本时。每次迭代的文本总是相同的,但是当我添加断点并检查应该在foreach变量中的文本时,它已经改变了。这是代码:

foreach (HtmlNode nodes in listingNode.ChildNodes)
                {
                    i++;
                    int row = dataGridView1.Rows.Add();
                    dataGridView1.Rows[row].Cells[0].Value = i; // ktory z kolei?
                    HtmlAttributeCollection imageNode = nodes.SelectSingleNode("//div[@class='bmlistt']").Attributes; // image
                    string node = imageNode[1].Value; // link for that image
                    // add adding image to row
                    dataGridView1.Rows[row].Cells[1].Value = null; // image
                    //HtmlNode artistspan = artistNode.SelectSingleNode("//span[@class='artist']");
                    dataGridView1.Rows[row].Cells[2].Value = nodes.SelectSingleNode("//div[@class='maintext']").SelectSingleNode("//span[@class='artist']").InnerHtml; //returns always same text
                    dataGridView1.Rows[row].Cells[3].Value = null; // title
                    dataGridView1.Rows[row].Cells[4].Value = null; // difficulties
                    //dataGridView1.Rows[row].Cells[5].Value = null; // Checkbox
                    if (i == 10)
                    {
                        i++; // breakpoint
                    }
}

来自断点的本地人(经过10次迭代)

https://dl.dropbox.com/u/21125662/compilation/_01055.jpg

橙色线显示出错了。 (查看代码,然后截屏)(节点应始终与节点相同)

1 个答案:

答案 0 :(得分:1)

XPath起初可能有点棘手,当你想从子节点中选择时你必须添加一个'。' (点)或您的XPath将始终从顶部节点中选择。

因此...

nodes.SelectSingleNode("//div[@class='bmlistt']").Attributes

...变为

nodes.SelectSingleNode(".//div[@class='bmlistt']").Attributes