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

4 回答 4

4

试试HTMLAgilityPack 。

这是一个可爱的 HTML 解析器,通常为此推荐。它将采用格式错误的 HTML 并将其转换为 XHTML,然后是可遍历的 DOM,例如 XML 类。因此,对于您在野外找到的代码非常有用。

于 2012-09-11T06:04:22.403 回答
1
HtmlElementCollection tData = wb.Document.GetElementsByTagName("div");

            foreach (HtmlElement td in tData)
            {
                string name = "";
                if (td.GetAttribute("classname") == "blink")
                {
                    name = td.InnerText;
                }
            }
于 2012-09-11T06:53:02.240 回答
1

以下是选项

  1. 应用正则表达式从响应 HTML 中提取此文本
  2. 制作 XML 文档,遍历所有的潜水标签。
于 2012-09-11T06:04:31.170 回答
0

我们在我们的一个项目中遇到了同样的情况。我建议Regex两者HTMLAgilityPack

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

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

希望这可以帮助

于 2012-09-11T06:19:01.423 回答