получить html-таблицу в c # с htmlagilitypack

c# datagridview html-agility-pack

Вопрос

Я начинал ведьму c #, и я пытался получить таблицу с веб-сайта и показать ее в datagridview. Сначала я попытался получить первые два столбца, и я могу получить данные, но он отображается во втором столбце.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Net;
using HtmlAgilityPack;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        private DataTable dt;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string htmlCode = "";
            using (WebClient client = new WebClient())
            {
                client.Headers.Add(HttpRequestHeader.UserAgent, "AvoidError");
                htmlCode = client.DownloadString("http://www.sismologia.cl/links/ultimos_sismos.html");
            }
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(htmlCode);

            dt = new DataTable();
            dt.Columns.Add("Local", typeof(string));
            dt.Columns.Add("UTC", typeof(string));

            int count = 0;

            foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
            {
                richTextBox1.Text = htmlCode;

                foreach (HtmlNode row in table.SelectNodes("//*[@id=\"main\"]/table//tr"))
                {
                    foreach (var cell in row.SelectNodes("//*[@id=\"main\"]/table//tr//td"))
                    {
                        DataRow dr = dt.NewRow();
                        if ((count % 2 == 0))
                        {
                            dr["Local"] = cell.InnerText.Replace(" ", " ");
                        }
                        else
                        {
                            dr["UTC"] = cell.InnerText.Replace(" ", " ");

                            dt.Rows.Add(dr);
                        }
                        count++;
                    }
                }

                dataGridView1.DataSource = dt;
            }
        }
    }
}

Принятый ответ

Решение, непосредственно выберите все tr в main div и проведите через него:

        string htmlCode = "";
        using (WebClient client = new WebClient())
        {
            client.Headers.Add(HttpRequestHeader.UserAgent, "AvoidError");
            htmlCode = client.DownloadString("http://www.sismologia.cl/links/ultimos_sismos.html");
        }
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

        doc.LoadHtml(htmlCode);

        var dt = new DataTable();
        dt.Columns.Add("Local", typeof(string));
        dt.Columns.Add("UTC", typeof(string));

        foreach (var row in doc.DocumentNode.SelectNodes("//*[@id='main']//tr"))
        {
            var nodes = row.SelectNodes("td");
            if (nodes != null)
            {

                var local = nodes[0].InnerText;
                var utc = nodes[1].InnerText;

                dt.Rows.Add(local, utc);
            }
        }



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему