我在使用 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
有人能帮忙吗?
编辑* 添加了 HTML 页面。 http://www.nhl.com/ice/playerstats.htm?navid=nav-sts-indiv#
最佳答案
这应该让你开始:
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
属性包含每行的所有单元格。索引确定您获得哪个单元格。
从播放器名称单元格中包含的 anchor 标记获取 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 的值。
关于c# - 使用 Htmlagilitypack + LINQ + Lambda 提取表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914608/