2009年12月3日木曜日

XSLT で文字列のfill

XLST を使って、ある文字列を加工して指定の文字列長に達するまでアスタリスクで埋めてみる。[参考URL]

たとえば以下のような変換になる。
<?xml version="1.0" encoding="UTF-8"?>
<list width="10">
<item>red</item>
<item>green</item>
<item>blue</item>
</list>
↓↓↓
<?xml version="1.0" encoding="UTF-8"?>
<lines>
<line>red*******</line>
<line>green*****</line>
<line>blue******</line>
</lines>

これを再帰を使ってやってみると、次のような XSLT になる。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/list">
<lines>
<xsl:apply-templates>
<xsl:with-param name="width" select="@width" />
</xsl:apply-templates>
</lines>
</xsl:template>

<xsl:template match="item">
<xsl:param name="width" />
<line>
<xsl:value-of select="." />
<xsl:call-template name="dots">
<xsl:with-param name="count" select="$width - string-length(.)" />
</xsl:call-template>
</line>
</xsl:template>

<xsl:template name="dots">
<xsl:param name="count" select="1" />
<xsl:if test="$count &gt; 0">
<xsl:text>*</xsl:text>
<xsl:call-template name="dots">
<xsl:with-param name="count" select="$count - 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

0 件のコメント:

コメントを投稿