Bazı durumlarda webrequest ile aldığımız yada elle oluşturduğumuz html tabloları dataset olarak almak isteyebiliriz. Bu gibi durumlarda kullanabileceğiniz bir yöntemden bahsetmek istiyorum.

 

Datasete çevirmek için kullanacağımız fonksiyon;

private DataSet ConvertHTMLTablesToDataSet(string HTML)

    {

 

        DataSet ds = new DataSet();

        DataTable dt = new DataTable();

        DataRow dr;

        DataColumn dc = new DataColumn();

        string TableExpression = "<table[^>]*>(.*?)</table>";

        string HeaderExpression = "<th[^>]*>(.*?)</th>";

        string RowExpression = "<tr[^>]*>(.*?)</tr>";

        string ColumnExpression = "<td[^>]*>(.*?)</td>";

        bool HeadersExist = false;

        int iCurrentColumn = 0;

        int iCurrentRow = 0;

        try

        {

 

 

 

            MatchCollection Tables = Regex.Matches(HTML, TableExpression, RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase);

 

            

 

            foreach (Match table in Tables)

            {

 

 

                

                iCurrentRow = 0;

                HeadersExist = false;

 

                

                dt = new DataTable();

 

               

 

                if (table.Value.Contains("<th"))

                {

                    

                    HeadersExist = true;

 

                    

                    MatchCollection Headers = Regex.Matches(table.Value, HeaderExpression, (RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase));

 

                    

                    foreach (Match Header in Headers)

                    {

                        dt.Columns.Add(Header.Groups[1].ToString());

                    }

                }

                else

                {

                    for (int iColumns = 1; iColumns < Regex.Matches(Regex.Matches(Regex.Matches(table.Value, TableExpression, RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase).ToString(), RowExpression, RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase).ToString(), ColumnExpression, RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase).Count; iColumns++)

                    {

                        dt.Columns.Add("Column " + iColumns);

                    }

                }

 

                

                MatchCollection Rows = Regex.Matches(table.Value, RowExpression, RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase);

 

                

                foreach (Match Row in Rows)

                {

 

 

                    

 

                    if (!(iCurrentRow == 0 & HeadersExist == true))

                    {

 

                        

                        dr = dt.NewRow();

                        iCurrentColumn = 0;

 

                        

                        MatchCollection Columns = Regex.Matches(Row.Value, ColumnExpression, RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase);

 

                        

                        foreach (Match Column in Columns)

                        {

                            if (Column.Groups[1].ToString().Trim() == " ")

                            {

                                dr[iCurrentColumn] = "";

                            }

                            else

                            {

                                dr[iCurrentColumn] = Column.Groups[1].ToString().Trim();

                            }

                            

                            iCurrentColumn += 1;

                        }

 

                        

                        dt.Rows.Add(dr);

 

                    }

 

                    

                    iCurrentRow += 1;

                }

 

 

                

                ds.Tables.Add(dt);

 

            }

 

        }

        catch (Exception e)

        {

            

            if (ds.Tables.Count == 0)

            {

                DataTable dt1 = new DataTable();

                ds.Tables.Add(dt1);

            }

        }

        return ds;

    } 

 

 

 

 

Datasete çevireceğimiz örnek tablomuz şu şekilde;

 

string str="<table id='tableOrdered'><tr><th><B>Ay</B></th><th><B>&#304;lk Tarih</B></th><th>Son Tarih</th><th>Konu</th></tr><tr class=even><td>&#350;ubat</td><td>01/01/2010</td><td>01/02/2010</td><td>Aralık 2009 Dönemine Ait Haberleşme Vergisinin Beyanı ve Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/01/2010</td><td>01/02/2010</td><td>Yıllık Harçların Ödenmesi </td></tr><tr class=even><td>&nbsp;</td><td>01/01/2010</td><td>01/02/2010</td><td>2010 Yılı Motorlu Taşıtlar Vergisi 1.Taksit Ödemesi Son Günü</td></tr><tr class=odd><td>&nbsp;</td><td>01/01/2010</td><td>01/02/2010</td><td>SSK (Aralık 2009) Sigorta Primlerinin Ödemesi </td></tr><tr class=even><td>&nbsp;</td><td>01/01/2010</td><td>01/02/2010</td><td>Bağ-Kur Sigortalılarının Ocak 2010 Sigorta Primi ve Sağlık Sigorta Primlerinin Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/01/2010</td><td>01/02/2010</td><td>2009 Yılında Kullanılan Defterlerin 2010 Yılında da Kullanılmak İstenmesi Halinde Yasal Defterlere İlişkin Ara Tasdik</td></tr><tr class=even><td>&nbsp;</td><td>01/01/2010</td><td>01/02/2010</td><td>Türk Ticaret Kanunu Hükümlerine Göre 2009 Yılına Ait Yevmiye Defterinin Kapanış Tasdiki </td></tr><tr class=odd><td>&nbsp;</td><td>05/01/2010</td><td>05/02/2010</td><td>Aralık 2009 Dönemine Ait Mal ve Hizmet Alımlarına İlişkin Bildirim Formu ( Form Ba)</td></tr><tr class=even><td>&nbsp;</td><td>05/01/2010</td><td>05/02/2010</td><td>Aralık 2009 Dönemine Ait Mal ve Hizmet Satışlarına İlişkin Bildirim Formu (Form Bs)</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>09/02/2010</td><td>16&#8211;31 Ocak Dönemine Ait Noterlerce Yapılan Makbuz Karşılığı Ödemelere Ait Bildirimlerin Verilmesi ve Ödenmesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>10/02/2010</td><td>16&#8211;31 Ocak Dönemine Ait Petrol ve Doğalgaz Ürünlerine İlişkin Özel Tüketim Vergisinin Beyanı ve Ödenmesi </td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>15/02/2010</td><td>Ocak 2010 Dönemine Ait Kolalı Gazoz, Alkollü İçecekler ve Tütün Mamullerine İlişkin Özel Tüketim Vergisinin Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>15/02/2010</td><td>Ocak 2010 Dönemine Ait Dayanıklı Tüketim ve Diğer Mallara İlişkin Özel Tüketim Vergisinin Beyanı ve Ödemesi </td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>15/02/2010</td><td>Ocak 2010 Dönemine Ait Motorlu Taşıt Araçlarına İlişkin Özel Tüketim Vergisinin (Tescile Tabi Olmayanlar) Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>15/02/2010</td><td>Ocak 2010 Dönemine Ait Özel İletişim Vergisinin Beyanı ve Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>15/02/2010</td><td>Ocak 2010 Dönemine Ait Banka ve Sigorta Muameleleri Vergisinin Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>15/02/2010</td><td>Ocak 2010 Dönemine Ait Kaynak Kullanımı Destekleme Fonu Kesintisi Bildirimi ve Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>15/02/2010</td><td>2009 IV. Geçici Vergi Dönemine (Ekim-Kasım-Aralık 2009)  Ait Gelir Geçici Vergisinin Beyanı </td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>15/02/2010</td><td>2009 IV. Geçici Vergi Dönemine (Ekim-Kasım-Aralık 2009)  Ait Kurum Geçici Vergisinin Beyanı</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>17/02/2010</td><td>2009 IV. Geçici Vergi Dönemine Ait Gelir Geçici Vergisinin Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>17/02/2010</td><td>2009 IV. Geçici Vergi Dönemine Ait Kurum Geçici Vergisinin Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>21/02/2010</td><td>Ocak 2010 Dönemine Ait Yangın Sigortası Vergisinin Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Petrol ve Doğalgaz Ürünlerine İlişkin EK:4 No.lu ÖTV Bildirim Formu </td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Kolalı Gazozlara İlişkin EK:7 No.lu ÖTV Bildirim Formu</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Alkollü İçeceklere İlişkin EK:8 No.lu ÖTV Bildirim Formu</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Tütün Mamullerine İlişkin EK:9 No.lu ÖTV Bildirim Formu</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Dayanıklı Tüketim ve Diğer Mallara İlişkin EK:10 No.lu ÖTV Bildirim Formu </td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Yarışma ve Çekilişler ile Futbol Müsabakalarına Ait Müşterek Bahislerle İlgili Veraset ve İntikal Vergisinin Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Şans Oyunları Vergisinin Beyanı ve Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait İlan ve Reklam Vergisinin Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Müşterek Bahislere İlişkin Eğlence Vergisinin Beyanı ve Ödemesi ile Diğer Eğlence Vergilerine İlişkin Eğlence Vergisinin Ödenmesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>22/02/2010</td><td>Ocak 2010 Dönemine Ait Elektrik ve Havagazı Tüketim Vergisinin Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>23/02/2010</td><td>Ocak 2010 Dönemine Ait Gelir Vergisi Stopajı&#8217;nın Muhtasar Beyanname ile Beyanı</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>23/02/2010</td><td>Ocak 2010 Dönemine Ait Kurumlar Vergisi Stopajı&#8217;nın Muhtasar Beyanname ile Beyanı</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>23/02/2010</td><td>Ocak 2010 Dönemine Ait İstihkaktan Kesinti Suretiyle Tahsil Edilen Damga Vergisi ile Sürekli Mükellefiyeti Bulunanlar İçin Makbuz Karşılığı Ödenmesi Gereken Damga Vergisinin Beyanı</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>24/02/2010</td><td>Ocak 2010 Dönemine Ait Katma Değer Vergisinin Beyanı </td></tr><tr class=even><td>&nbsp;</td><td>16/02/2010</td><td>24/02/2010</td><td>1&#8211;15 Şubat Dönemine Ait Noterlerce Yapılan Makbuz Karşılığı Ödemelere Ait Bildirimlerin Verilmesi ve Ödenmesi</td></tr><tr class=odd><td>&nbsp;</td><td>16/02/2010</td><td>25/02/2010</td><td>1&#8211;15 Şubat Dönemine Ait Petrol ve Doğalgaz Ürünlerine İlişkin Özel Tüketim Vergisinin Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>25/02/2010</td><td>Basit Usulde Vergilendirilen Mükelleflerin 2009 Yılına İlişkin Gelir Vergisi Beyanı</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>26/02/2010</td><td>Ocak 2010 Dönemine Ait Gelir Vergisi Stopajı\\'nın Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>26/02/2010</td><td>Ocak 2010 Dönemine Ait Kurumlar Vergisi Stopajı\\'nın Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>26/02/2010</td><td>Ocak 2010 Dönemine Ait İstihkaktan Kesinti Suretiyle Tahsil Edilen Damga Vergisi ile Sürekli Mükellefiyeti Bulunanlar İçin Makbuz Karşılığı Ödenmesi Gereken Damga Vergisinin Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>26/02/2010</td><td>Ocak 2010 Dönemine Ait Katma Değer Vergisinin Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>01/03/2010</td><td>Basit Usulde Vergilendirilen Mükelleflerin Gelir Vergisi 1. Taksit Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>01/03/2010</td><td>Diğer Ücretlerin Gelir Vergisi 1. Taksit Ödemesi </td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>01/03/2010</td><td>Ocak 2010 Dönemine Ait Haberleşme Vergisinin Beyanı ve Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>01/03/2010</td><td>SSK (Ocak 2010) Sigorta Primlerinin Ödemesi</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>01/03/2010</td><td>Bağ-Kur Sigortalılarının Şubat 2010 Sigorta Primi ve Sağlık Sigorta Primlerinin Ödemesi</td></tr><tr class=even><td>&nbsp;</td><td>01/02/2010</td><td>01/03/2010</td><td>Ocak 2010 Dönemine Ait Mal ve Hizmet Alımlarına İlişkin Bildirim Formu (Form Ba)</td></tr><tr class=odd><td>&nbsp;</td><td>01/02/2010</td><td>01/03/2010</td><td>Ocak 2010 Dönemine Ait Mal ve Hizmet Satışlarına İlişkin Bildirim Formu (Form Bs)</td></tr></table>"

 

 Kullanımı,

 DataSet ds= ConvertHTMLTablesToDataSet (str);

 

sonuç;

 

 
 
 
 
 
Kafanıza takılan yerler olursa sormaktan çekinmeyin,
İyi Çalışmalar 
 
Mustafa KOÇER
mkocer@dotnetkosesi.com  
 
 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5