private static ExamRoom ParseRoom(HtmlNode container, int row) { return(ExamRoom.Deserialize((new[] { 2, 4, 5, 6 }).Select((col) => { var parsed = HTMLUtils.ParseHTML(container, String.Format("tr[{0}]/td[{1}]", row, col)); return parsed.FirstOrDefault()?.Replace(" ", ""); }))); }
private static Grade ParseGrade(HtmlNode container, int row) { return(Grade.Deserialize((new[] { 3, 6, 8, 9, 10, 11 }).Select((col) => { var parsed = HTMLUtils.ParseHTML(container, String.Format("tr[{0}]/td[{1}]", row, col)); return parsed.FirstOrDefault()?.Replace(" ", ""); }))); }
public void LoadCourses(string html) { var document = new HtmlDocument(); document.LoadHtml(html); var container = document.DocumentNode.SelectSingleNode("html/body/table/tr[2]/td/table/tr/td/table/tr/td/div/table"); for (var col = 0; col < 6; ++col) // course { for (var row = 0; row < 7; ++row) // weekdays { var result = HTMLUtils.ParseHTML(container, String.Format("tr[{0}]/td[{1}]", col + 4, row + 2)); courses[row][col].Courses.AddRange(Course.Deserialize(result)); } } Term = String.Join(" ", HTMLUtils.ParseHTML(container, "tr[1]/td[1]")); StudentInfo = String.Join(" ", HTMLUtils.ParseHTML(container, "tr[2]/td[1]").First() .Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries) ); }
public void LoadGrades(string html) { var document = new HtmlDocument(); document.LoadHtml(html); var parent = document.DocumentNode.SelectSingleNode("html/body/table/tr[2]/td/table"); var info = HTMLUtils.ParseHTML(parent, "tr/td/table/tr/td").First().Split(new[] { " ", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); StudentInfo = String.Join(" ", info); var container = parent.SelectSingleNode("tr[2]/td/div/table"); // class count text in html, has the form "共有记录数(\d+)" courses = Convert.ToInt32(Regex.Match(HTMLUtils.ParseHTML(container, "tr[last()]/td").First(), @"共有记录数(\d+)").Groups[1].Value); grades = new Grade[courses]; for (var row = 0; row < courses; ++row) { grades[row] = ParseGrade(container, row + 2); } }