c# - 使用 Htmlagilitypack + LINQ + Lambda 提取表

标签 c# linq lambda html-agility-pack

我在使用 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/

相关文章:

c# - 在 PuppeteerSharp 中取消下载

c# - 如何在方法调用周围添加常用功能?

c# - 基于表的一个字段在 Linq 中区分

Linq GroupBy 如果它们被其他键分隔,则不合并具有相同键的分组

c++ - 如何在 C++ 中使用 Null Lambda?

c# - 在泛型方法中与 Int32 类型一起使用时,无法从用法中推断出 UInt32 和 UInt64 类型

c# - 如何在WPF项目中固定Avalondock选项卡的位置

c# - 使用传入的参数作为搜索字段使用 Entity Framework Web API 创建动态搜索查询

java - takeWhile() 与平面图的工作方式不同

java - 使用匿名可运行类代码进入死锁状态,但使用 lambda 可以正常工作