public static string[] GetPropertyNames(HtmlDocument d) { return(d.DocumentNode.SelectSingleNode("//table") .Descendants("tr") .First() .Elements("th") .Select(th => CreatureDescriptor.ConvertToPopertyName(th.InnerText)) .ToArray()); }
public IList<CreatureDescriptor> ParseCreatureDatas() { HtmlDocument d = new HtmlDocument(); d.LoadHtml(File.ReadAllText("Data/creatures.html")); var data = d.DocumentNode.SelectSingleNode("//table") .Descendants("tr") .Where(tr => tr.Elements("td").Count() > 1) .Select(tr => tr.Elements("td").Skip(0).Select(td => td.InnerText.Trim()).ToList()) .ToArray(); var names = d.DocumentNode.SelectSingleNode("//table") .Descendants("tr") .First() .Elements("th") .Skip(1) .Select(x => x.InnerText) .ToArray(); return names.Select((x, i) => { var res = new CreatureDescriptor(x); foreach (var row in data) { res.GetType().GetProperty(CreatureDescriptor.ConvertToPopertyName(row[0])) .SetValue(res, int.Parse(row[i + 1])); } return res; }).ToArray(); }