Exemple #1
0
        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;
        }
Exemple #2
0
        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;
        }