【问题标题】:How can I find and remove CSS references in HTML head?如何在 HTML 头部中查找和删除 CSS 引用?
【发布时间】:2012-09-24 05:01:21
【问题描述】:

我创建了一项服务,用于在 CMS 系统上加入、缩小和压缩 css 引用。示例:

之前:

<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" />

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

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

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

我可以访问页面的原始 html,但一直无法成功定位引用,不知道是否应该解析为 xml 或使用正则表达式等。

谁能指出我正确的方向?

【问题讨论】:

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


    【解决方案1】:

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

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

    2. 通过 XPath 在 HtmlDocument 对象中查找链接节点

      var nodes = doc.DocumentBody.SelectNodes("//head/link[@type='text/css']");

    3. 从这些节点中检索 href

      字符串 href = 节点[0].Attributes["href"].Value;

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

    【讨论】:

    • 因为这个包已经在解决方案上,我现在正在研究这个。看起来很有希望
    【解决方案2】:

    您可以使用正则表达式找到与您的规则匹配的链接:

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

    它会给你引号内的文件路径,例如'/文件/css1.css'。您可以使用该结果来构建您想要的字符串。

    C# 友好的正则表达式:

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2022-01-22
      • 2014-07-13
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多