2

我在使用 lambda 表达式解析 html 表时遇到了一些困难。

var cells = htmlDoc.DocumentNode
                .SelectNodes("//table[@class='data stats']/tbody/tr")
                .Select(node => new { playerRank = node.InnerText.Trim()})
                .ToList();
            foreach (var cell in cells)
            {
                Console.WriteLine("Rank: " + cell.playerRank);
                Console.WriteLine();
            }

我想继续使用语法为

.Select(node => new { playerRank = node.InnerText.Trim()

但是对于表格的其他类别,例如球员姓名、球队、位置等。我使用的是 Xpath,所以我不确定它是否正确。

我在找出如何从以下位置提取链接 + 玩家名称时遇到问题:

<a href="/ice/player.htm?id=8474564">Steven Stamkos</a>

它的 Xpath 是:

//*[@id="fullPage"]/div[3]/table/tbody/tr[1]/td[2]/a

任何人都可以帮忙吗?

EDIT* 添加了 HTML 页面。 http://www.nhl.com/ice/playerstats.htm?navid=nav-sts-indiv#

4

1 回答 1

0

这应该让你开始:

var result = (from row in doc.DocumentNode.SelectNodes("//table[@class='data stats']/tbody/tr")
                         select new
                         {
                             PlayerName = row.ChildNodes[1].InnerText.Trim(),
                             Team = row.ChildNodes[2].InnerText.Trim(),
                             Position = row.ChildNodes[3].InnerText.Trim()
                         }).ToList();

ChildNodes属性包含每行的所有单元格。索引确定您获得哪个单元格。

要从包含在播放器名称单元格中的锚标记获取 url:

var result = (from row in doc.DocumentNode.SelectNodes("//table[@class='data stats']/tbody/tr")
                          select new
                          {
                              PlayerName = row.ChildNodes[1].InnerText.Trim(),
                              PlayerUrl = row.ChildNodes[1].ChildNodes[0].Attributes["href"].Value,
                              Team = row.ChildNodes[2].InnerText.Trim(),
                              Position = row.ChildNodes[3].InnerText.Trim()
                          }).ToList();

Attributes集合是 HTML 元素中的属性列表。我们只是在获取 href 的值。

于 2013-11-11T22:57:48.470 回答