2

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 セクションのすべての参照を自動的に取得し、それらを 1 行に置き換えることです。

これらのルールに該当するもののみを置き換える必要があります。

  • 外部を読み込もうとするのを避けるために、Href は「/Files/」で始まります
  • 結果の css ファイルには 1 つの設定しかないため、media 属性または media="all" を持つもののみを含める必要があります。

ページの生のhtmlにアクセスできますが、参照をうまく見つけることができず、xmlに解析する必要があるのか​​、正規表現などを使用する必要があるのか​​ わかりません..

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

1

HTML Agility Packを使用します。攻撃の大まかな計画:

  1. html コンテンツを HtmlDocument オブジェクトに読み込みます。

  2. XPath を介して HtmlDocument オブジェクト内のリンク ノードを検索します。

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

  3. これらのノードから href を取得します

    string href = ノード[0].Attributes["href"].Value;

  4. 次に、ノードを新しいノードに置き換えます。

于 2012-10-03T09:53:27.277 に答える
0

ルールに一致するリンクを正規表現で見つけることができます。

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

引用符内のファイルパス(例:'/Files/css1.css')が表示されます。その結果を使用して、必要な文字列を作成できます。

C#フレンドリーな正規表現:

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

Regex.Matchメソッドを使用して、グループ化を取得します:http: //msdn.microsoft.com/en-us/library/twcw2f1c.aspx

于 2012-10-03T10:04:27.377 に答える