如何在C#中获取HTML的一部分

时间:2012-09-11 05:55:07

标签: c# asp.net html parsing c#-4.0

请考虑这种情况:

我们有两个网页。一个包含一些控件的简单页面和Execute首页并获得输出HTML的另一个页面。例如:

StringWriter textWriter = new StringWriter();
HttpContext.Current.Server.Execute("Blinker.aspx", textWriter);
Label1.Text= Server.HtmlEncode(textWriter.ToString());

并返回此(例如):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
    <title> </title> 
</head> 
<body> 
<form method="post" action="Blinker.aspx" id="form1"> 
    <div class="aspNetHidden"> 
        <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZKwUTjEtU7qJweOD/x+Op0ROdM+jDqyILuizFGhjOJQj" /> 
    </div> 
    <div class="blink"> Some Test</div> 
</form> 
</body> 
</html> 

问题是如果我只想:

<div class="blink"> Some Test</div> 

我如何从C#中的输出html中获取它?

感谢

4 个答案:

答案 0 :(得分:4)

尝试HTMLAgilityPack

这是一个可爱的HTML解析器,通常建议使用它。这将需要格式错误的HTML并按摩它到XHTML,然后是一个可遍历的DOM,比如XML类。因此,对于您在野外找到的代码非常有用。

答案 1 :(得分:1)

以下是选项

  1. 应用正则表达式从响应HTML中提取此文本
  2. 制作XML文档,遍历所有潜水标记。

答案 2 :(得分:1)

HtmlElementCollection tData = wb.Document.GetElementsByTagName("div");

            foreach (HtmlElement td in tData)
            {
                string name = "";
                if (td.GetAttribute("classname") == "blink")
                {
                    name = td.InnerText;
                }
            }

答案 3 :(得分:0)

我们在其中一个项目中遇到了相同的情况。我会建议RegexHTMLAgilityPack

  • 使用Agilitypack,您可以使用C#代码从网页中过滤掉特定内容,并且还有LINQ

  • 然后,如果您需要获取Div中的任何特定文本或任何单个值,您可以使用正则表达式。

希望这有帮助