【问题标题】:How to read a line of HTML using C#如何使用 C# 读取一行 HTML
【发布时间】:2011-06-08 21:33:37
【问题描述】:

我知道如何读取 txt 文件中的一行,但由于某种原因,C# 没有检测到 HTML 文件的行尾。此代码基本上打开了 html 文件并尝试逐行解析以搜索指定的字符串。即使只是尝试打印 HTML 文件中的第一行文本,也不会显示任何内容。

using (StreamReader sr = new StreamReader("\\\\server\\myFile.html"))
        {
            String line;
            while ((line = sr.ReadLine()) != null)
            {
                if(line == ("<td><strong>String I wantstrong></td>"))
                {
                    Label1.Text = "Text Found";
                    break;
                }
            }
        }

我已经尝试过使用纯 txt 文件,它运行良好,只是在尝试解析 HTML 文件时没有。

谢谢。

【问题讨论】:

  • 结尾strong是结束标签。
  • 对不起,我在复制和粘贴时搞砸了,我的代码上有“
  • 文件中有内容吗?运行应用程序的用户是否有权使用该网络资源?如果您在本地复制文件,此代码是否有效?如果你在循环中中断,断点是否命中?在我看来,这里需要完成的调试工作相当简单……
  • 如果您尝试读取您没有权限(或不存在)的文件,您将收到错误消息。但无论它是否有内容......好吧;)

标签: c# html parsing


【解决方案1】:

读取 line 的外部循环工作正常。我的猜测是发生以下情况之一:

  • HTML 文件为空
  • HTML 文件的第一行是空的

在任何一种情况下,您都不会看到打印的任何内容。

现在,进入你的循环:

你可能看不到你所期望的,因为

 if(line == ("<td><strong>String I wantstrong></td>"))
 {
    Label1.Text = "Text Found";
    break;
 }

寻找 EXACT 匹配项。如果这是您的实际代码,那么您在 &lt;/strong&gt; 上缺少左括号 &lt;/,并且您可能忘记了 HTML 内容中有空格(缩进)。

【讨论】:

    【解决方案2】:

    您无需发明轮子。解析 HTML 更好的方法是使用 HTML 解析器:

    http://htmlagilitypack.codeplex.com/http://www.justagile.com/linq-to-html.aspx

    这里也有类似的问题What is the best way to parse html in C#?

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      目前最好的方法是使用HTML Agility Pack

      更多关于这个可以在之前的堆栈溢出问题中找到

      Looking for C# HTML parser

      【讨论】:

        【解决方案4】:

        如果您知道要解析的 HTML 属于 XHTML,为什么不使用 System.XML 将此 HTML 解析为 XML?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-09-30
          • 2016-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-27
          相关资源
          最近更新 更多