示例#1
0
        public static List<WikiTable> GetProtocolTables()
        {
            var webClient = new WebClient();
            var html = webClient.DownloadString("http://wiki.vg/Protocol");

            var doc = new HtmlDocument();
            doc.LoadHtml(html);

            var ids = new List<string>();
            foreach (var htmlTable in doc.DocumentNode.Descendants("h4"))
            {
                var span = htmlTable.Element("span");
                if (span.GetAttributeValue("class", string.Empty).Equals("mw-headline"))
                    ids.Add(span.GetAttributeValue("id", "NONE"));
            }

            var tables = new List<WikiTable>();
            foreach (var htmlTable in doc.DocumentNode.Descendants("table"))
            {
                if (htmlTable.GetAttributeValue("class", string.Empty).Equals("wikitable"))
                {
                    var table = new WikiTable();

                    // HEADERS
                    var elements = htmlTable.Elements("tr");
                    {
                        var first_tr = elements.ElementAt(0);

                        foreach (var th in first_tr.Elements("th"))
                            table.Headers.Add(th.InnerText);

                        table.Height = elements.Count() - 1;
                    }

                    // VALUES
                    int x = 0;
                    int y = 0;
                    for (int i = 1; i < elements.Count(); i++)
                    {
                        var tr = elements.ElementAt(i);

                        y = 0;
                        foreach (var td in tr.Elements("td"))
                        {
                            string rowspan;
                            if ((rowspan = td.GetAttributeValue("rowspan", string.Empty)) != string.Empty)
                                table.RepeatAtY(x, y, int.Parse(rowspan));

                            string colspan;
                            if ((colspan = td.GetAttributeValue("colspan", string.Empty)) != string.Empty)
                                table.RepeatAtX(x, y, int.Parse(colspan));

                            table.AddCell(x, td.InnerText.Trim().Replace("\n", string.Empty), rowspan != string.Empty);

                            y++;
                        }

                        x++;
                    }

                    tables.Add(table);
                }
            }

            var index = 0;
            return tables.Where(t =>
            {
                var rValue = t.Headers.Any(h => h.Contains("Packet ID"));
                if(rValue)
                {
                    t.Name = ids[index];
                    index++;
                }
                return rValue;
            }).ToList();
        }
示例#2
0
        public static List <WikiTable> GetProtocolTables()
        {
            var webClient = new WebClient();
            var html      = webClient.DownloadString("http://wiki.vg/Protocol");

            var doc = new HtmlDocument();

            doc.LoadHtml(html);

            var ids = new List <string>();

            foreach (var htmlTable in doc.DocumentNode.Descendants("h4"))
            {
                var span = htmlTable.Element("span");
                if (span.GetAttributeValue("class", string.Empty).Equals("mw-headline"))
                {
                    ids.Add(span.GetAttributeValue("id", "NONE"));
                }
            }

            var tables = new List <WikiTable>();

            foreach (var htmlTable in doc.DocumentNode.Descendants("table"))
            {
                if (htmlTable.GetAttributeValue("class", string.Empty).Equals("wikitable"))
                {
                    var table = new WikiTable();

                    // HEADERS
                    var elements = htmlTable.Elements("tr");
                    {
                        var first_tr = elements.ElementAt(0);

                        foreach (var th in first_tr.Elements("th"))
                        {
                            table.Headers.Add(th.InnerText);
                        }

                        table.Height = elements.Count() - 1;
                    }

                    // VALUES
                    int x = 0;
                    int y = 0;
                    for (int i = 1; i < elements.Count(); i++)
                    {
                        var tr = elements.ElementAt(i);

                        y = 0;
                        foreach (var td in tr.Elements("td"))
                        {
                            string rowspan;
                            if ((rowspan = td.GetAttributeValue("rowspan", string.Empty)) != string.Empty)
                            {
                                table.RepeatAtY(x, y, int.Parse(rowspan));
                            }

                            string colspan;
                            if ((colspan = td.GetAttributeValue("colspan", string.Empty)) != string.Empty)
                            {
                                table.RepeatAtX(x, y, int.Parse(colspan));
                            }

                            table.AddCell(x, td.InnerText.Trim().Replace("\n", string.Empty), rowspan != string.Empty);

                            y++;
                        }

                        x++;
                    }

                    tables.Add(table);
                }
            }

            var index = 0;

            return(tables.Where(t =>
            {
                var rValue = t.Headers.Any(h => h.Contains("Packet ID"));
                if (rValue)
                {
                    t.Name = ids[index];
                    index++;
                }
                return rValue;
            }).ToList());
        }