示例#1
0
        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
        }
示例#2
0
        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));
        }
示例#3
0
        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
                }
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }