MkItYs

MkItYs > アプリの制作・サイトの統合 > 

images

文書を生成するときのチップス

images

中間文書から最終文書を生成するときの、いくつかのチップスを示します。

生成する空タグを短縮形にしない


生成するタグが空タグのとき、短縮形(<X/>)ではなく、開始タグ〜終了タグの形(<X></X> )で表示したいことがあります。

しかしXMLでは、短縮形も開始タグ〜終了タグの形も同じ意味なので、通常のXSLの処理系では、その表示を恣意的に変えることはできません。

このような場合、(いくつか対応のしかたはありますが)たとえば<ゼロ幅空白>の実体参照(&#8203; )を値にすることで、開始タグ〜終了タグの形で生成できます(ゼロ幅空白文字は、幅のない空白文字なので、生成される文書には表示されません。):[※1]

雛形(XSLT):
<script>&#8203;</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.