我正在做一个数据收集方面的程序,其中有一块是读取HTML文件中的内容,但是HTML和XML文件不同,不好处理,有没有朋友做过这方面的东西,给个思路.多谢!
HTML代码大致如下,
<table>
<tr align='center' height='22' class="alternatingitem">
 <td>手套</td>
 <td>130</td>
 <td><img src="images/uparrow.gif" title="正常" alt="正常" /></td>
</tr>
<tr>
  .................
  .................
</tr>
</table>
我想做的就是把里面的信息提取出来,如上面的HTML代码,信息提取后,得到下面的信息手套
130
正常能不能给出详细的代码.谢谢

解决方案 »

  1.   

    如果是使用C# 2005,则可以通过WebBrowser读入该HTML文件,然后解释Document属性,就可以得到网页上面的所有对象了
      

  2.   

    private void Form1_Load(object sender, EventArgs e)
            {
                this.webBrowser1.Navigate("d:\\test.htm");
            }        private void button1_Click(object sender, EventArgs e)
            {
                foreach (HtmlElement element in this.webBrowser1.Document.All)
                {
                    try
                    {
                        //加入判断,看看element.TagName,就可以知道该element是什么对象了
                        this.listBox1.Items.Add(element.OuterText);
                    }
                    catch
                    {
                    }
                }
            }
      

  3.   


    读入部分就不写了,这里按个字符串处理
    <%@ Page Language="VB" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim str As String
            str = "<table>" & _
        "<tr align='center' height='22' class=""alternatingitem"">" & _
        "<td>手套</td>" & _
        "<td>130</td>" & _
        "<td><img src=""images/uparrow.gif"" title=""正常"" alt=""正常"" /></td>" & _
        "</tr>" & _
        "<tr>" & _
        "................." & _
        "................." & _
        "</tr>" & _
        "</table>"
            Dim out As New StringBuilder("")
            Dim Regex As New Regex( _
          "alt=""([\u4E00-\u9FA5]*?)""|<td>([\d\w]*?)<\/td>", _
                              RegexOptions.IgnoreCase)
            '  "\[url\s*=\s*([^""]+)\s*\]([\s\S]*?)\[\/url\]", _
            For Each m As Match In Regex.Matches(str)
                out.AppendLine(m.Groups(1).Value & m.Groups(2).Value)
            Next
            L.Text = (out.ToString)
        End Sub
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <body>
    <form id="form1" runat="server">
    <pre>
    <asp:Literal ID="L" runat="server"></asp:Literal>
    </pre>
    </form>
    </body>
    </html>
      

  4.   

    我以前做过一个类似的数据采集,我用的是正则表达式,取出想要的内容后直接写入XML的,如果你的HTML中要提取的内容格式一致,可以用下面的方法试下
    string yourStr = ......;MatchCollection mc = Regex.Matches(yourStr, "<tr.*?\n.*?<td>(?<name>.+?)</td>.*?\n.*?<td>(?<number>.+?)</td>.*?\n.*?<td><.*?title=\"(?<title>.+?)\".*?</td>.*?\n.*?</tr>", RegexOptions.IgnoreCase);foreach(Match m in mc)
    {
        m.Groups["name"].Value;//1:手套
        m.Groups["number"].Value;//2:130
        m.Groups["title"].Value;//3:正常
    }
      

  5.   

    非常感谢大家的提议,jinta2001()兄提出的用C# 2005的方法比较简单,看来我是落后了,以后得多学习一下2005.lxcnn,chsword(邹健)两位大哥给的方法大同小异,主要是用正则表达式.但是我要采集数据的网站很多,并且每个页面上面的数据格式也不尽相同,还有没有更好的办法?
      

  6.   

    ([\u4E00-\u9FA5]*?)|<[^>\w\W]>([\d\w]*?)<\/[^>\w\W]>
    这样就可以区匹配任意中文和HTML标签中间的内容了
    不过如果网页本身有问题,就会不成功
      

  7.   

    邹健兄,可否告之你的联系方法,以后多交流!
    我的MSN:[email protected]