如何在HTML头中查找和删除CSS引用?

时间:2012-10-03 09:30:16

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

我已经创建了一个服务来加入,缩小和压缩CMS系统上的css-references。例如:

之前:

<link href="/Files/css1.css" rel="stylesheet" type="text/css"/>
<link href="/Files/css2.css" rel="stylesheet" type="text/css"/>
<link href="/Files/css3.css" rel="stylesheet" type="text/css" media="all"/>

现在你可以写:

<link href="/min.ashx?files=/Files/css1.css,/Files/css2.css,/Files/css3.css" rel="stylesheet" type="text/css" />

我的下一个任务是在头部分AUTOMATICALLY中获取所有引用,并将它们替换为一行,如示例所示。

我应该只替换那些符合这些规则的内容:

  • Href以'/ Files /'开头,以避免尝试加载externals externals
  • 只应包含属性为media或media =“all”的那些,因为生成的css文件只有一个设置。

我可以访问页面的原始html,但是仍然坚持找到引用,不知道我是应该解析为xml还是使用正则表达式等。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

使用HTML Agility Pack。粗略的攻击计划:

  1. 将html内容加载到HtmlDocument对象中。

  2. 通过XPath

    在HtmlDocument对象中查找链接节点

    var nodes = doc.DocumentBody.SelectNodes(&#34; // head / link [@type =&#39; text / css&#39;]&#34;);

  3. 从这些节点中检索hrefs

    string href = nodes [0] .Attributes [&#34; href&#34;]。Value;

  4. 然后用新节点替换节点。

答案 1 :(得分:0)

您可以使用正则表达式找到符合您规则的链接:

<link href="(/Files/[^"]+)" .* media

它将为您提供引号内的文件路径,例如'/Files/css1.css'。您可以使用该结果来构建所需的字符串。

C#friendly regex:

@"<link href=""(/Files/[^""]+)"" .* media"

使用Regex.Match方法获取分组:http://msdn.microsoft.com/en-us/library/twcw2f1c.aspx