0

このシナリオを検討してください。

2つのWebページがあります。いくつかのコントロールを含む単純なページと、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に変換してから、XMLクラスのようにトラバース可能なDOMに変換します。したがって、実際に見られるコードには非常に便利です。

于 2012-09-11T06:04:22.403 に答える
1

以下はオプションです

  1. 正規表現を適用して、応答HTMLからこのテキストを抽出します
  2. XMLドキュメントを作成し、すべてのダイビングタグを繰り返し処理します。
于 2012-09-11T06:04:31.170 に答える
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 に答える
0

私たちのプロジェクトの1つでも同じシナリオがありました。Regex私は両方を提案しますHTMLAgilityPack

  • LINQAgilitypackを使用すると、C#コードを使用してWebページから特定のコンテンツを除外できます。

  • 次に、Div内の特定のテキストまたはそこにある個々の値をフェッチする必要がある場合は、正規表現を使用できます。

お役に立てれば

于 2012-09-11T06:19:01.423 に答える