2013-11-11 2 views
2

У меня возникают трудности с использованием выражения лямбда для анализа таблицы html.Извлечение таблицы с использованием Htmlagilitypack + LINQ + Lambda

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#

+0

Просьба указать ссылку на страницу, которую вы пытаетесь очистить. – broke

+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 свойство содержит все ячейки в каждом ряду. Индекс с определением, какую ячейку вы получите.

Чтобы получить 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.

+0

Я скоро попробую. Спасибо за руководство. –

+0

Есть ли способ получить «/ice/player.htm?id=8474564» из тега ссылки? Я не могу понять это. –

+0

@LucaTenuta см. Мое редактирование. – broke

Смежные вопросы