中間文書から最終文書を生成するときの、いくつかのチップスを示します。
生成する空タグを短縮形にしない
生成するタグが空タグのとき、短縮形(<X/>)ではなく、開始タグ〜終了タグの形(<X></X> )で表示したいことがあります。
しかしXMLでは、短縮形も開始タグ〜終了タグの形も同じ意味なので、通常のXSLの処理系では、その表示を恣意的に変えることはできません。
このような場合、(いくつか対応のしかたはありますが)たとえば<ゼロ幅空白>の実体参照(​ )を値にすることで、開始タグ〜終了タグの形で生成できます(ゼロ幅空白文字は、幅のない空白文字なので、生成される文書には表示されません。):[※1]
- ・
- 雛形(XSLT):
<script>​</script>
- ・
- 生成(XHTML/HTML):
<script></script>
- ※1
- もちろんこういった<ゼロ幅>の文字は、それぞれの用途のために用意されています(たとえばゼロ幅空白は、<ここで改行が可能>ということを示すのに使われます)。ただこれらは、文字列のなかで用いる場合に意味があるので、空タグの中で使っても効果はありません。
属性を付ける独自タグ
独自タグの中間文書から文書を生成するとき、生成するタグに任意の属性をつけたいことがあります。
属性をつけるXSLのタグは「xsl:attribute 」ですが、これをそのまま利用すると、属性の値に独自タグを使うことができません。
このような場合、次のような「xsl:attribute 」のラッパを定義することで、<タグに属性を付ける>独自タグになります(ここでは「x:prop」という名前にしています):[※1]
<xsl:template mode="x:mapper" match="x:prop"> <xsl:attribute name="{@name}"> <xsl:apply-templates mode="x:mapper"/> </xsl:attribute> </xsl:template>
- ※1
- 空タグにこれを適用すると、次のようなエラーになります。とりあえず適用するタグの値になんらかの終端文字(<ゼロ幅空白>など)を挿入することで、回避はできますが……
xsl:attribute: Cannot add attributes to an element if children have been already added to the element.