<?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="primes.xsl" ?> <max>100</max>
下の枠内では、上記のようなXMLファイル(primes.xml)をiframeで読み込んでいます。
primes.xmlで指定しているXSL (primes.xsl)は以下の通りです。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<p>
<xsl:text>2, 3</xsl:text>
<xsl:call-template name="primes">
<xsl:with-param name="x" select="5" />
<xsl:with-param name="max" select="max" />
</xsl:call-template>
</p>
</xsl:template>
<xsl:template name="primes">
<xsl:param name="x" />
<xsl:param name="max" />
<xsl:if test="$x < $max">
<xsl:call-template name="primeQ">
<xsl:with-param name="x" select="$x" />
<xsl:with-param name="check" select="3" />
</xsl:call-template>
<xsl:call-template name="primes">
<xsl:with-param name="x" select="$x + 2" />
<xsl:with-param name="max" select="$max" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="primeQ">
<xsl:param name="x" />
<xsl:param name="check" />
<xsl:if test="$check = $x">
<xsl:text>, </xsl:text><xsl:value-of select="$x" />
</xsl:if>
<xsl:if test="$check < $x">
<xsl:if test="($x mod $check) != 0">
<xsl:call-template name="primeQ">
<xsl:with-param name="x" select="$x" />
<xsl:with-param name="check" select="$check + 2" />
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
これがLLかどうかはわかりませんが、ドキュメントにそのまま挿入できるので便利です(嘘)。
- 参考:XSLTでの再帰によるループ(IBM)
- 参考:安陪隆明「XSLTの遊び部屋」(「XSLT登竜門」に改訂されたようです)
Related posts: