3

以下 HTML 语句存储在字符串中。我需要删除写在 HTML 标签之间的文本 <style></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解决此问题。该工具专为 html 解析等而设计。编写正则表达式或自行解析只会给您带来麻烦,并可能导致程序中的安全风险。

于 2013-01-29T11:11:44.673 回答
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

这里不需要使用额外的库。尝试这样的事情。

// 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 回答
1
_htmlContent = Regex.Replace(_htmlContent, "< style.*?< /style>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);

试试这个。<如果您感到懒惰并想复制粘贴代码,请删除小于号后的多余空格。

于 2013-07-03T11:45:44.430 回答
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 回答