2017-03-27 20 views
0

私はC#を開始しています。私はウェブサイトからテーブルを取得して、それをdatagridviewに表示しようとしていました。 最初の2つの列を最初に取得しようとしましたが、データを取得できますが、2番目の列に表示されます。htmlagilitypackでhtmlテーブルを取得する

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; 
      } 
     } 
    } 
} 

答えて

0

ソリューション、直接それを介してmain DIV、ループ内のすべてのtrを選択:

 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); 
      } 
     } 
関連する問題