private static bool HasVerticalColumns(HtmlNode table) { #if NET20 if (0 != IEnumerableExtensionMethods.Count(table.Descendants("thead"))) #else if (table.Descendants("thead").Any()) #endif { return(false); } #if NET20 var row = IEnumerableExtensionMethods.FirstOrDefault(table.Descendants("tr")); #else var row = table.Descendants("tr").FirstOrDefault(); #endif if (null == row) { return(false); } #if NET20 return(0 != IEnumerableExtensionMethods.Count(row.Descendants("th"))); #else return(row.Descendants("th").Any()); #endif }
private static IList <string> Columns(HtmlNode table) { #if NET20 var head = IEnumerableExtensionMethods.FirstOrDefault(table.Descendants("thead")); #else var head = table.Descendants("thead").FirstOrDefault(); #endif return(null == head?ColumnsRow(table) : ColumnsHead(head)); }
private static void AddVerticalDataColumns(DataTable obj, HtmlNode body) { var i = -1; var span = 1; foreach (var row in body.Descendants("tr")) { i++; if (span > 1) { span--; continue; } #if NET20 var heading = IEnumerableExtensionMethods.FirstOrDefault(row.Descendants("th")); #else var heading = row.Descendants("th").FirstOrDefault(); #endif if (null == heading) { obj.Columns.Add(XmlConvert.ToString(i), typeof(HtmlNode)); continue; } var attribute = heading.Attributes["rowspan"]; span = null == attribute ? 1 : XmlConvert.ToInt32(attribute.Value); #if NET20 || NET35 var text = HttpUtility.HtmlDecode(heading.InnerText); #else var text = WebUtility.HtmlDecode(heading.InnerText); #endif if (1 == span) { obj.Columns.Add(text, typeof(HtmlNode)); continue; } for (var s = 0; s < span; s++) { #if NET20 obj.Columns.Add(StringExtensionMethods.FormatWith("{0} ({1})", text, s + 1), typeof(HtmlNode)); #else obj.Columns.Add("{0} ({1})".FormatWith(text, s + 1), typeof(HtmlNode)); #endif } } }
private static IList <string> ColumnsRow(HtmlNode table) { var list = new List <string>(); #if NET20 var row = IEnumerableExtensionMethods.FirstOrDefault(table.Descendants("tr")); #else var row = table.Descendants("tr").FirstOrDefault(); #endif if (null == row) { return(list); } #if NET20 var headers = IEnumerableExtensionMethods.ToList(row.Descendants("th")); #else var headers = row.Descendants("th").ToList(); #endif if (0 == headers.Count) { #if NET20 headers = IEnumerableExtensionMethods.ToList(row.Descendants("td")); #else headers = row.Descendants("td").ToList(); #endif } #if NET20 foreach (var header in headers) { list.Add(ColumnName(header)); } #else list.AddRange(headers.Select(ColumnName)); #endif return(list); }
private static void AddDataTable(DataSet data, HtmlNode table) { var result = new DataTable { Locale = CultureInfo.InvariantCulture }; var id = table.Attributes["id"]; if (null != id) { var name = id.Value; if (null != data.Tables[name]) { return; } result.TableName = name; } else { #if NET20 var caption = IEnumerableExtensionMethods.FirstOrDefault(table.Descendants("caption")); #else var caption = table.Descendants("caption").FirstOrDefault(); #endif if (null != caption) { result.TableName = caption.InnerText; } } FillDataTable(result, table); data.Tables.Add(result); }