我在使用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>
它的X路是:
//*[@id="fullPage"]/div[3]/table/tbody/tr[1]/td[2]/a
任何人都可以帮忙吗?
EDIT *添加了HTML页面。 http://www.nhl.com/ice/playerstats.htm?navid=nav-sts-indiv#
答案 0 :(得分: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
属性包含每行的所有单元格。索引确定您获得的单元格。
要从播放器名称单元格中包含的锚标记中获取网址:
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的值。