2016-04-24 3 views
1

Моя модель:Concat два 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, Teams и Championship. DateOfEvent и Teams исходят из нескольких строк, но есть один 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 
    }); 
Смежные вопросы