C#从字符串中提取div的内容

时间:2013-12-29 17:26:32

标签: html regex c#-4.0

我需要从外部URL中提取div内第二个表的内容tr和td。我无法使用HtmlAglitityPack。

设计是这样的:

<div class="class1" id="content-main">
      <table width="90%">
        <tbody>
          <tr><td class="table_left_corner">&nbsp;</td><td class="table_head">table1 </td><td class="table_right_corner">&nbsp;</td></tr>
        </tbody>
      </table>
      <table width="90%">
        <tbody>
          <tr><td class="table_left_corner">&nbsp;</td><td class="table_head">table2</td><td class="table_right_corner">&nbsp;</td></tr>
        </tbody>
      </table>
      <table width="90%">
        <tbody>
          <tr><td class="table_left_corner">&nbsp;</td><td class="table_head">table3 </td><td class="table_right_corner">&nbsp;</td></tr>
        </tbody>
      </table>
</div>

所以我想使用一些Regex函数来返回表的内容。

 using (WebClient client = new WebClient())
 {
    string htmlcode= client.DownloadString("http://www.example.com");

    string r = @"<div.*?id=""content-main"".*?>.*</div>";       

    Match match2 = Regex.Match(htmlcode, r);

    string a = match2.Groups[1].Value;
 }

我使用不同的正则表达式,但都失败了。所以请帮忙。我怎样才能获得第二张桌子的内容。

编辑2 使用HTMLAglityPack

    var web = new HtmlWeb();
    var document = web.Load("http://www.example.com/");
    var page = document.DocumentNode;


string outerHTML = page.SelectNodes("//table")[5].OuterHtml;
    Match match1;
    match1 = Regex.Match(outerHTML, @"<a [^>]+>(.*?)<\/a>");

        while (match1.Success)
        {
            string NAme = match1.Groups[1].Value;                      

            var webloc = new HtmlWeb();
            dynamic documentloc = null;
            documentloc = webloc.Load(urlAddress + NAme.Replace(" ", "-").ToLower());
            dynamic pageloc = documentloc.DocumentNode;

            string outerHTMLloc = pageloc.SelectNodes("//table")[5].OuterHtml;

            match1 = match1.NextMatch();                               
        }

第一次成功运行但第二次出现时,它会在&#34; outerHTMLloc&#34;

上引发错误

错误:&#34;未处理的类型&#39; System.StackOverflowException&#39;发生在HtmlAgilityPack.DLL&#34;

1 个答案:

答案 0 :(得分:0)

假设您希望div中第二个表的值为id'content-main',那么您的代码应为:

string value=pageloc.SelectNodes("//div[@id='content-main']//table")   //select all table tags inside div tag
                    .Skip(1)   //skip the first table
                    .First()    //take the second table
                    .InnerHtml;