public List<MetroLine> GetSpbMetroSchema() { var htmlWeb = new HtmlWeb(); var htmlDoc = htmlWeb.Load(TargetUrlSPB); var contentElement = htmlDoc.GetElementbyId("mw-content-text"); var lines = new List<MetroLine>(); var currentNode = contentElement.Element("h2"); for (int i = 0; i < CountSPBMetroLines; i++) { string lineName = currentNode.Element("span").Element("a").InnerText; var tableNode = currentNode.NextSibling.NextSibling; var stationRows = tableNode.Elements("tr").Skip(2); var line = new MetroLine(lineName); foreach (var row in stationRows) { var rowCells = row.Elements("td").ToList(); var stationName = rowCells[0].Descendants("a").ToList()[0].InnerText; line.Stations.Add(new MetroStation(stationName)); // клиент просил добавить вестибюль // вообще-то это не станция // TODO: адаптировать BL под вестибюли if (lineName == "Фрунзенско-Приморская линия" && stationName == "Спортивная") { line.Stations.Add(new MetroStation("Спортивная 2")); } } lines.Add(line); currentNode = tableNode.NextSibling.NextSibling; } return lines; }
public List<MetroLine> GetMoscowMetroSchema() { var htmlWeb = new HtmlWeb(); var htmlDoc = htmlWeb.Load(TargetUrlMoscow); var contentElement = htmlDoc.GetElementbyId("mw-content-text"); var lines = new List<MetroLine>(); var wikiTable = contentElement.Element("table"); var allMetroRows = wikiTable.Elements("tr"); foreach (HtmlNode metroRow in allMetroRows) { if (!metroRow.ChildNodes.Any(n => n.Name == "td")) continue; var rowCells = metroRow.Elements("td").ToList(); var lineNameSpan = rowCells[0].ChildNodes.First(n => n.Attributes.Any(a => a.Name == "title")); var lineName = lineNameSpan.Attributes.First(a => a.Name == "title").Value; MetroLine line; if (!lines.Any(l => l.Name == lineName)) { line = new MetroLine(lineName); lines.Add(line); } else { line = lines.Single(l => l.Name == lineName); } var station = new MetroStation(rowCells[1].Element("span").Element("a").InnerText); line.Stations.Add(station); } return lines; }