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>İlk Tarih</B></th><th>Son Tarih</th><th>Konu</th></tr><tr class=even><td>Ş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> </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> </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> </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> </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> </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> </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> </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> </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> </td><td>01/02/2010</td><td>09/02/2010</td><td>16–31 Ocak Dönemine Ait Noterlerce Yapılan Makbuz Karşılığı Ödemelere Ait Bildirimlerin Verilmesi ve Ödenmesi</td></tr><tr class=even><td> </td><td>01/02/2010</td><td>10/02/2010</td><td>16–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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </td><td>01/02/2010</td><td>23/02/2010</td><td>Ocak 2010 Dönemine Ait Gelir Vergisi Stopajı’nın Muhtasar Beyanname ile Beyanı</td></tr><tr class=odd><td> </td><td>01/02/2010</td><td>23/02/2010</td><td>Ocak 2010 Dönemine Ait Kurumlar Vergisi Stopajı’nın Muhtasar Beyanname ile Beyanı</td></tr><tr class=even><td> </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> </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> </td><td>16/02/2010</td><td>24/02/2010</td><td>1–15 Şubat Dönemine Ait Noterlerce Yapılan Makbuz Karşılığı Ödemelere Ait Bildirimlerin Verilmesi ve Ödenmesi</td></tr><tr class=odd><td> </td><td>16/02/2010</td><td>25/02/2010</td><td>1–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> </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> </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> </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> </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> </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> </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> </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> </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> </td><td>01/02/2010</td><td>01/03/2010</td><td>SSK (Ocak 2010) Sigorta Primlerinin Ödemesi</td></tr><tr class=odd><td> </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> </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> </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