XML/XSLT stylesheet/para

Материал из Web эксперт
Перейти к: навигация, поиск

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