我已经创建了一个服务来加入,缩小和压缩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中获取所有引用,并将它们替换为一行,如示例所示。
我应该只替换那些符合这些规则的内容:
我可以访问页面的原始html,但是仍然坚持找到引用,不知道我是应该解析为xml还是使用正则表达式等。
有人能指出我正确的方向吗?
答案 0 :(得分:1)
使用HTML Agility Pack。粗略的攻击计划:
将html内容加载到HtmlDocument对象中。
通过XPath
在HtmlDocument对象中查找链接节点var nodes = doc.DocumentBody.SelectNodes(&#34; // head / link [@type =&#39; text / css&#39;]&#34;);
从这些节点中检索hrefs
string href = nodes [0] .Attributes [&#34; href&#34;]。Value;
然后用新节点替换节点。
答案 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