Viewing file: dn_20010504.py (3.04 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# Dimitre Novatchev <dnovatchev@yahoo.com> discover a brilliant # technique for dynamic template selection
import os from Ft.Lib import Uri from Xml.Xslt import test_harness
sheet_1 = """\ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:num="num" xmlns:num2="num2" >
<num:node>num</num:node> <num2:node>num2</num2:node>
<xsl:output method="text" /> <xsl:variable name="document" select="document('')" /> <xsl:variable name="gtNum-node" select="$document//num:*"/> <xsl:variable name="gtNum2-node" select="$document//num2:*"/>
<xsl:template match="/"> <xsl:call-template name="get-max"> <xsl:with-param name="greaterSelector" select="$gtNum-node" /> <xsl:with-param name="nodes" select="/numbers/num" /> </xsl:call-template> <xsl:text>
</xsl:text>
<xsl:call-template name="get-max"> <xsl:with-param name="greaterSelector" select="$gtNum2-node" /> <xsl:with-param name="nodes" select="/numbers/num" /> </xsl:call-template> </xsl:template>
<xsl:template name="get-max"> <xsl:param name="greaterSelector" select="/*"/> <xsl:param name="nodes" />
<xsl:choose> <xsl:when test="$nodes"> <xsl:variable name="max-of-rest"> <xsl:call-template name="get-max"> <xsl:with-param name="greaterSelector" select="$greaterSelector" /> <xsl:with-param name="nodes" select="$nodes[position()!=1]" /> </xsl:call-template> </xsl:variable>
<xsl:variable name="isGreater"> <xsl:apply-templates select="$greaterSelector" > <xsl:with-param name="n1" select="$nodes[1]"/> <xsl:with-param name="n2" select="$max-of-rest"/> </xsl:apply-templates> </xsl:variable> <xsl:choose> <xsl:when test="$isGreater = 'true'"> <xsl:value-of select="$nodes[1]" /> </xsl:when>
<xsl:otherwise> <xsl:value-of select="$max-of-rest" /> </xsl:otherwise> </xsl:choose> </xsl:when>
<xsl:otherwise> <xsl:value-of select="-999999999" />
<!-- minus infinity --> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="isGreaterNum" match="node()[namespace-uri()='num']"> <xsl:param name="n1"/> <xsl:param name="n2"/>
<xsl:value-of select="$n1 > $n2"/> </xsl:template>
<xsl:template name="isGreaterNum2" match="node()[namespace-uri()='num2']"> <xsl:param name="n1"/> <xsl:param name="n2"/>
<xsl:value-of select="1 div $n1 > 1 div $n2"/> </xsl:template>
</xsl:stylesheet>"""
source_1 = """\ <numbers> <num>3</num> <num>2</num> <num>9</num> <num>4</num> <num>6</num> <num>5</num> <num>7</num> <num>8</num> <num>1</num> </numbers>"""
expected_1 = """\ 9 1"""
def Test(tester): uri = Uri.OsPathToUri(os.path.abspath(__file__)) source = test_harness.FileInfo(string=source_1) sheet = test_harness.FileInfo(string=sheet_1, baseUri=uri) test_harness.XsltTest(tester, source, [sheet], expected_1) return
|