fc2ブログ
ホーム   »  XML/XSL  »  Mozilla の disable-output-escaping

Mozilla の disable-output-escaping

どうやら Mozilla 系 (Firefox, Netscape) のブラウザは <xsl:value-of>disable-output-escaping 属性を無視するらしい。

XML に記述されている &< などの文字は XSL の出力方法に適切な形式でエスケープされるのだが、この属性を "yes" に設定することでこの動作を解除する事が出来る。つまり XML に埋め込んだ HTML タグがそのまま利くようになるわけだ。

<?xml version="1.0"?>
<?xml-stylesheet href="style.xsl" type="text/xsl"?>
<search-engine><![CDATA[
    <a href="http://www.google.com">Google</a>
]]></search-engine>

上記のような XML に対して:

<xsl:value-of select="/search-engine" disable-output-escaping="yes" />

という記述は Google へのリンクを生成する (もし no にすれば <a href=... という文字がそのまま画面に表示される)。

ほとんどの XSL 対応ブラウザがこの挙動を踏襲しているにもかかわらず、Mozilla は no にした場合と同じ動作になる。しかも Mozilla 開発者によれば W3C 仕様のもにゃもにゃに準拠しているのでバグではない、将来的にも対応する予定も無い、解釈の違いだ、との事だ。

何じゃそりゃ。W3C の仕様にこの属性はちゃんと盛り込まれている。出力結果に非 Valid HTML が混ざるのに現行の設計が対応しておらず、2 重になってるパーサの実行コストにも跳ねるのですぐには対応できない、手を入れたくないというのが実際の本音のようだ。

とりあえず、この問題は JavaScript の力を借りて何とか回避することはできた。

一度 HIDDEN 型の <INPUT> 要素値として出力した後、表示位置の innerHTML に設定してやれば、disable-output-escaping="yes" にした場合と同じ出力結果を得ることができる。

<input type="hidden" id="foo" value="{/search-engine}" />
<span id="bar"></span>
<script language="JavaScript">
    document.getElementById("bar").innerHTML
        = document.getElementById("foo").value;
</script
>

あまりスマートではないが、XSL をサポートしてるブラウザなら Mozilla 以外でも意図した通りに動いてくれるだろう。しかし XSL の Content-Type の件やら見てると、あぐらかいて作り込みが甘い体質は相変わらずのようだ。

コメント
トラックバック
トラックバック URL
コメントの投稿
管理者にだけ表示を許可する
Profile
Takami Torao
Takami Torao
C/C++ 使いだった 1996年、運命の Java と出会い現在に至る。のらアーキテクト。
Yah, this is image so I don't wanna eat spam, sorry!
Search

Google
MOYO Laboratory
Web

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
RSSフィード
リンク