ブラウザごとというか、ベンダーごとのXSLの仕様の違いをまとめる。
シェアは現象傾向にある某ブラウザへの対応依頼があった。
参考データとかが書いてある。
http://en.wikipedia.org/wiki/XML_template_engine
wikiを見ると、ほんとうにいろいろな実装があるものだと思う。
SablotronがGETとかが扱えるようで良さげだったので、リンクをはっておく。
http://www.gingerall.org/sablotron.html
とりあえず、シェアの多そうなところだけ見てみる。
Microsoft | |
Mozila | TransforMiiX. |
Safari |
http://msdn.microsoft.com/ja-jp/library/aa468550.aspx
http://www.mozilla.org/projects/xslt/
http://nwalsh.com/docs/tutorials/xsl/xsl/slides.html
今は無きSunの2000年度のドキュメント!
あたらしいのは、載っていないのかな?
https://developer.mozilla.org/en/XSL_Transformations_in_Mozilla_FAQ
https://developer.mozilla.org/en/Building_TransforMiiX_standalone
Firefoxで
disable-output-escaping="yes"
上記の仕様がXSLの仕様として決まっているにも関わらず、対応していない。
disable-output-escapingの問題に特化したページ
http://www.dpawson.co.uk/xsl/sect2/N2215.html
<xsl:copy-of>
を使って、生成済みのエレメントを複製する方法が書いてあった。(気にするケースはすくないと思うが、この場合、タグ要素は正規化される)
FAQに言い訳が書いてある。
https://developer.mozilla.org/en/XSL_Transformations_in_Mozilla_FAQ
既に、バグとして起票済みで、たくさんの人が困っているもよう
https://bugzilla.mozilla.org/show_bug.cgi?id=98168
直せばいいのに。。。
メリットとしては、ことごとく、特殊な文字は、エスケープしてしまうので、データによってレイアウトが崩れる心配は減る。
デメリット、<xsl:element>で要素を生成するしか手だてはないのだが、<hoge></hoge>という出力をしたくても、<hoge/>というタグの形式に正規化されてしまう。一見、問題ないように思えるのだが、とある、かつて一世風靡したブラウザのとあるタグが、<hoge/>を正常に認識せず、<hoge></hoge>という形式しか対応していないというのがあって、対応させられた思いがある。
これを防ぐ方法として、output-disable-encoding="yes"が使えないので、こまっていた件がある
http://ykr414.com/xml/xml05.html
サンプルコード
Version number: <xsl:value-of select="system-property('xsl:version')" /> Vendor: <xsl:value-of select="system-property('xsl:vendor')" /> Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" />
<xsl:if test="system-property('xsl:vendor')='Transformiix'"> <!-- Mozilla specific markup --> </xsl:if> <xsl:if test="system-property('xsl:vendor')='Microsoft'"> <!-- IE specific markup --> </xsl:if>
参照元:firefoxのFAQ
<xsl:if xmlns:msxsl="urn:schemas-microsoft-com:xslt" test="system-property('msxsl:version')=3"> <!-- MSXML3 specific markup --> </xsl:if>
このサンプルでもしマイクロソフトのブラウザなどを使っている場合は、
<xsl:value-of select="system-property('xsl:vendor')" />
の値は
Microsoft
となる。
http://www.devguru.com/technologies/xslt/quickref/xslt_function_systemproperty.html
http://www6.airnet.ne.jp/manyo/xml/index.html
<?xml version="1.0" > <object> <foo> <bar> hoge </bar> </foo> </object>
<?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <div> fuga </div>
正しいHTMLではないが、<div>タグで囲むと一応表示してくれた。
IEとfirefoxで確認した。
<?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>SAMPLE</title> </head> <body> <div>fuga</div> </body> </html> </xsl:template>