XML/XSLT stylesheet/para
Содержание
Change these global parameter values
File: Data.xml
<x>
<input>7</input>
<input>27</input>
</x>
File: Transform.xslt
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" indent="yes" version="1.0" />
<xsl:param name="parInput_1" select="x/input[1]" />
<xsl:param name="parInput_2" select="x/input[2]" />
<xsl:template match="x">
<xsl:param name="total">
<xsl:call-template name="y">
<xsl:with-param name="z" select="$parInput_2" />
</xsl:call-template>
</xsl:param>
<xsl:value-of select="$total - $parInput_1" />
</xsl:template>
<xsl:template name="y">
<xsl:param name="z" select="$parInput_2" />
<xsl:value-of select="$z" />
</xsl:template>
</xsl:stylesheet>
Output:
20
Compare value with defined parameter
File: Data.xml
<wine grape="Cabernet">
<winery>shop 1</winery>
<product>product 1</product>
<year>1996</year>
<price>11.99</price>
</wine>
File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" />
<xsl:param name="bodyTextSize">10pt</xsl:param>
<xsl:template match="/">
<xsl:if test="$bodyTextSize != "10pt"">
<xsl:message>
bodyTextSize default value overridden with value of
<xsl:value-of select="$bodyTextSize" />
.
</xsl:message>
</xsl:if>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="winery">
<b>
<font size="{$bodyTextSize}">
<xsl:apply-templates />
<xsl:text> </xsl:text>
<xsl:value-of select="../@grape" />
</font>
</b>
<br />
</xsl:template>
<xsl:template match="product">
<i>
<font size="{$bodyTextSize}">
<xsl:apply-templates />
</font>
</i>
<br />
</xsl:template>
<xsl:template match="year | price">
<font size="{$bodyTextSize}">
<xsl:apply-templates />
</font>
<br />
</xsl:template>
</xsl:stylesheet>
Output:
<b><font size="10pt">shop 1 Cabernet</font></b><br>
<i><font size="10pt">product 1</font></i><br>
<font size="10pt">1996</font><br>
<font size="10pt">11.99</font><br>
Define a parameter and use it
File: Data.xml
<wine grape="Cabernet">
<winery>shop 1</winery>
<product>product 1</product>
<year>1996</year>
<price>11.99</price>
</wine>
File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" />
<xsl:param name="bodyTextSize">10pt</xsl:param>
<xsl:template match="/">
<xsl:if test="not(contains($bodyTextSize,"pt"))">
<xsl:message terminate="yes">
bodyTextSize must be specified in points (pt).
</xsl:message>
</xsl:if>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="winery">
<b>
<font size="{$bodyTextSize}">
<xsl:apply-templates />
<xsl:text> </xsl:text>
<xsl:value-of select="../@grape" />
</font>
</b>
<br />
</xsl:template>
<xsl:template match="product">
<i>
<font size="{$bodyTextSize}">
<xsl:apply-templates />
</font>
</i>
<br />
</xsl:template>
<xsl:template match="year | price">
<font size="{$bodyTextSize}">
<xsl:apply-templates />
</font>
<br />
</xsl:template>
</xsl:stylesheet>
Output:
<b><font size="10pt">shop 1 Cabernet</font></b><br>
<i><font size="10pt">product 1</font></i><br>
<font size="10pt">1996</font><br>
<font size="10pt">11.99</font><br>
Define a parameter and use it later
File: Data.xml
<wine grape="Type 1">
<winery>Los Vascos</winery>
<year>1998</year>
<prices>
<list>13.99</list>
<discounted>11.99</discounted>
<case>143.50</case>
</prices>
</wine>
File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" />
<xsl:param name="bodyTextSize">10pt</xsl:param>
<xsl:template match="winery">
<b>
<font size="{$bodyTextSize}">
<xsl:apply-templates />
<xsl:text> </xsl:text>
<xsl:value-of select="../@grape" />
</font>
</b>
<br />
</xsl:template>
<xsl:template match="product">
<i>
<font size="{$bodyTextSize}">
<xsl:apply-templates />
</font>
</i>
<br />
</xsl:template>
<xsl:template match="year | price">
<font size="{$bodyTextSize}">
<xsl:apply-templates />
</font>
<br />
</xsl:template>
</xsl:stylesheet>
Output:
<b><font size="10pt">Los Vascos Type 1</font></b><br>
<font size="10pt">1998</font><br>
13.99
11.99
143.50