2009/06/02

XSLTでblueprint用の宣言を出力できずに悩む

XML + XSLTの勉強をしつつ、CSSの勉強もしなきゃと思いblueprintを試してみました。

体裁を整えるという意味では簡単に使えるので、オリジナルの文書の一部を<div class="prepend-10 span-8 last">なんかで囲むだけで使えるという意味では良い感じです。

たまたま簡単なXSLTを試そうとblueprintに必要なlinkタグを含んだXHTMLを生成しようとしたのですが、おきまりの宣言を出力するのに少し勝手がわからず苦労しました。 うまく表示できなかった部分は次の個所です。

<!--[if lt IE 8]>
  <link rel="stylesheet" href="blueprint/ie.css" type="text/css" media="screen, projection" />
<![endif]-->
"[if lt IE 8]"の表記自体は、IEのバージョン毎に表示したい文字列を変化するための方法としてCSS - Conditional commentsなどで紹介されています。

XSLTでtemplateの中に入れて、そのまま出力しようとすると、内容が消えてしまいます。 まぁXMLレベルでコメントに入っていますから、XSLTで処理される対象となる前に無視されてしまいます。

XSLTでコメントを出力するために"xsl:comment"タグで囲めば良いのは、わりとすぐに判りましたが、"<!"の部分でXMLがパースエラーを起してしまい、困ってしまいました。 XMLレベルの話しなのに、XSLTの中から答えを探そうとしていたのが原因だったので、それに気がついてからは割と簡単に答えに辿り着きました。

最終的にはこんな感じに落ち着きました。

<xsl:comment>[if lt IE 8]>
<![CDATA[<link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection" />]]>
<![CDATA[<![endif]]]></xsl:comment>
別にどうって事もなかったんですけどね。最初はこんなもんでしょう。

0 件のコメント: