搜索字符串,检索下一行

时间:2012-04-30 23:17:54

标签: c# html parsing html-parsing

我正在阅读一个巨大的HTML字符串,其中包含我需要从中提取的一些信息。我可以设置搜索参数(解析的位置),但是如何在不保存到临时文件然后使用StreamReader的情况下实现此目的?

示例:

//Pertinent data starts here:
<!--
   body for the page starts here
-->

    <table border="0" >
      <tr>
        <td class='HeaderTD'><b>User Name</b></td>
        <td class='HeaderTD'><b>Mark TheMan</b></td>
      </tr>
      <tr>
        <td class='DataTD_Black_Bold '>Department</td>
        <td class='DataTD'>Programming</td>
      </tr>
      <tr>
        <td class='DataTD_Black_Bold '>Office Phone</td>
        <td class='DataTD'>555-555-5555</td>
      </tr>
      <tr>
        <td class='DataTD_Black_Bold '>Office Ext</td>
        <td class='DataTD'>x5555</td>

我需要在类中设置一些属性到各个字段(字符串):

User.UserName = "Mark TheMan";
User.Department = "Programming";
User.OfficePhone = "555-555-5555";

您看我需要搜索包含"<b>User Name</b>"之类的行,然后返回下一行,以便我可以解析所需的数据。如果您需要更多信息,请告诉我们,谢谢!

1 个答案:

答案 0 :(得分:3)

你应该使用Html解析器,HtmlAgilityPack非常好。

这是一个小型控制台应用程序,向您展示从表中删除数据是多么容易:

static void Main(string[] args)
{
  HtmlDocument doc = new HtmlDocument();
  doc.Load("example.html");
  foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
  {
    foreach (HtmlNode row in table.SelectNodes("tr"))
    {
      foreach (HtmlNode cell in row.SelectNodes("th|td"))
      {
        Console.WriteLine("Cell value : " + cell.InnerText);
      }
    }
  }
}

对于您的示例输出将是:

Cell value : User Name
Cell value : Mark TheMan
Cell value : Department
Cell value : Programming
Cell value : Office Phone
Cell value : 555-555-5555