3

次の HTML ステートメントは文字列に格納されます。<style>HTML タグと タグの間に書かれたテキストを削除する必要があります。 </style>

<html> <head><style type="text/css">
        @font-face { 
            font-family: "tunga";
            src: url(tunga.TTF); 
        }

        body {              
            font-family:"tunga";
            padding:0;
            margin: 0;
        }


        table {
            font-family:"tunga";
            padding:0;
        }

        a {
            text-decoration:none
        }

    </style></head>  <body marginwidth="0" marginheight="0" leftmargin="10" topmargin="0" >
    </body>
    </html>

C# コードを使用してこの問題を解決するにはどうすればよいですか?

4

7 に答える 7

8

HtmlAgilityPackを使用してHtmlファイルをロードします。

ファイルを開きます。

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(myHtmlString);

次に、ノードを削除します。

foreach(var descendant in htmlDocument.DocumentNode.Descendants("style").ToList())
    descendant.Remove()

次に、HTMLファイルを表す文字列を取得します。

string htmlWithoutStyle = htmlDocument.DocumentNode.OuterHtml;
于 2013-01-29T11:10:30.540 に答える
3
string str = "<html> <head><style type='text/css'> jhiun  </style></head> </html>";
            Console.WriteLine(str);
            string strToRemove = str.Substring(str.IndexOf("<style"), str.IndexOf("</style>") - str.IndexOf("<style") + 8); 
            Console.WriteLine(str.Replace(strToRemove,""));
            Console.ReadLine();
于 2013-01-29T11:17:12.663 に答える
1

HtmlAgilityPackを使用します。独自のパーサーをロールしようとしないでください。

var doc=new HtmlDocument();
doc.LoadHtml(html);
doc.DocumentNode.SelectSingleNode("//style").RemoveAllChildren();
using(var sw=new StringWriter())
{
    doc.Save(sw);
    var moddedHtml=sw.ToString();
}
于 2013-01-29T11:15:46.413 に答える
1

これはhtmlagilitypackで解決できます。このツールは、html の解析などのために設計されています。正規表現を記述したり、自分で解析したりすると、問題が発生するだけでなく、プログラムのセキュリティ リスクにつながる可能性があります。

于 2013-01-29T11:11:44.673 に答える
1
_htmlContent = Regex.Replace(_htmlContent, "< style.*?< /style>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);

これを試して。<また、怠け者でコードをコピーして貼り付けたい場合は、小なり記号の後の余分なスペースを削除してください。

于 2013-07-03T11:45:44.430 に答える
1

ここで追加のライブラリを使用する必要はありません。このようなことを試してください。

// Find the start tag
var start = html.IndexOf("<style");

// Find the end tag
var end = html.IndexOf("</style>") + 8;

// Remove the tag using Substring
var newHtml = html.Substring(0, start - 1) + html.Substring(end);
于 2013-01-29T11:16:23.633 に答える
0

追加のライブラリを使用するか、単純な文字列削除を使用できます...

RemoveHTMLTagsText("your html statement", "<style>");

public static string RemoveHTMLTagsText(string html, string tag)
{
      int startIndex = html.IndexOf(tag.Remove(tag.Length - 1));
      startIndex = html.IndexOf(">", startIndex) + 1;
      int endIndex = html.IndexOf(tag.Insert(1, "/"), startIndex) - startIndex;
      html = html.Remove(startIndex, endIndex);
      return html;
}
于 2013-01-29T11:19:34.050 に答える