0

好吧,当我尝试使用具有很少功能的 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

橙色线显示出了什么问题。(查看代码,然后查看屏幕截图)(节点应始终与节点相同)

4

1 回答 1

1

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

所以...

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

变成……

nodes.SelectSingleNode(".//div[@class='bmlistt']").Attributes
于 2012-10-21T20:54:16.637 回答