使用HtmlAgilityPack

时间:2013-09-14 14:04:11

标签: c# html asp.net html-agility-pack

我有一个问题HtmlAgilityPack,我想要下面的图片。但它与线条不一致。我该怎么办?

enter image description here

enter image description here

HtmlWeb web = new HtmlWeb();
web.OverrideEncoding = Encoding.GetEncoding("windows-1254");
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.yerelnet.org.tr/belediyeler/belediye.php?belediyeid=129531");

var nufus = doc.DocumentNode.SelectNodes("/html/body/center/table/tr/td[2]/table/tr[2]/td[2]/table/tr[2]/td/table/tr/td/table[5]/tr/td[2]/table/tr/td[3]/table[2]");

string str = String.Empty;
string line = String.Empty;

if (nufus != null)
{

    for (int i = 0; i < nufus.Count; i++)
    {
        str += nufus[i].InnerText.Replace("&nbsp;", "").Replace("\t", "").Replace("Nüfus Bilgileri", "");

        string[] s = str.Split('\n');

        for (int x = 10; x < s.Count(); x++)
        {
            if (s[x] != String.Empty && s[x] != " ")
            {
                lnufus.Add(s[x].ToString());
                lnufus.Add(s[x].ToString());
                lnufus.Add(s[x].ToString());
                lnufus.Add(s[x].ToString());
            }
        }
    }
}

dataGridView1.DataSource = lnufus.GroupBy(x => x).Select(g => new
{
    Yıl = g.Key, Toplam = g.Key, Kadin = g.Key, Erkek = g.Key
}).ToList();

1 个答案:

答案 0 :(得分:1)

不需要奇怪的 xpath查询。这应该工作

var nufus = doc.DocumentNode.SelectNodes("//table[@class='belediyeler']/tr")
            .Skip(1)
            .Select(tr => tr.Elements("td").Select(td => td.InnerText).ToList())
            .Select(td => new { Yil = td[0], Toplam = td[1], Kadin = td[2], Erkek = td[3] })
            .ToList();

dataGridView1.DataSource = nufus;