2016-04-24 51 views
1

我的模型:的毗连2的SelectNodes htmlagilitypack

public class Event 
{ 
    public string DateOfEvent { get; set; } 
    public string Teams { get; set; } 
    public string Championship { get; set; } 
} 

DateOfEvent和我的团队从表剖析与此代码:

var matches = currentData.DocumentNode.SelectNodes("//tr[@class=' event-header']"). 
       Select(tr => new Event() 
       { 
        DateOfEvent = 
        tr.SelectNodes("./td[1]/table/tr[1]/td[2]//text()[normalize-space()]") 
          .Single() 
          .InnerText.Trim(), 
        Teams = tr.SelectNodes("./td[1]/table/tr[1]/td[3]//text()[normalize-space()]") 
          .Single() 
          .InnerText.Trim(), 
       }); 

我有DateOfEvent和团队多条记录。但我需要添加到这些所有记录Field Championship,但它的字段不是从表中解析的。

var b = currentData.DocumentNode.SelectNode("//div[@class ='sport-champ']") 
           .Select(p=> new Event() 
        { 
         Championship = ...... 
        }); 

我该怎么做?

+0

你怎么每个锦标赛数据链接到DateOfEvent和团队?按位置/索引还是有更好的规则,你可以从HTML中看到? – har07

回答

0

如果我理解正确,您希望选择一组Event对象,其属性为DateOfEvent,TeamsChampionshipDateOfEventTeams来自多行,但有一个Championship,每个都是一样的?

在这种情况下,只得到Championship第一:

var championship = currentData.DocumentNode.SelectNode("//div[@class ='sport-champ']") 
    .InnerText.Trim(); 

,然后做你的Select从行:

var matches = currentData.DocumentNode.SelectNodes("//tr[@class=' event-header']"). 
    Select(tr => new Event() 
    { 
     DateOfEvent = tr.SelectNodes("./td[1]/table/tr[1]/td[2]//text()[normalize-space()]") 
      .Single() 
      .InnerText.Trim(), 
     Teams = tr.SelectNodes("./td[1]/table/tr[1]/td[3]//text()[normalize-space()]") 
      .Single() 
      .InnerText.Trim(), 
     Championship = championship 
    });