<?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登竜門」に改訂されたようです)