Export (0) Print
Expand All

XSLT Parameters

XSLT parameters are added to the XsltArgumentList using the AddParam method. A qualified name and namespace URI are associated with the parameter object at that time.

To use an XSLT parameter

  1. Create an XsltArgumentList object and add the parameter using the AddParam method.

  2. Call the parameter from the style sheet.

  3. Pass the XsltArgumentList object to the Transform method.

The parameter object should correspond to a W3C type. The following table shows the corresponding W3C types, the equivalent Microsoft .NET classes (type), and whether the W3C type is an XPath type or XSLT type.

W3C type

Equivalent .NET class (type)

XPath or XSLT type

String

System.String

XPath

Boolean

System.Boolean

XPath

Number

System.Double

XPath

Result Tree Fragment

System.Xml.XPath.XPathNavigator

XSLT

Node*

System.Xml.XPath.XPathNavigator

XPath

Node Set

XPathNodeIterator

XPathNavigator[]

XPath

*This is equivalent to a node set that contains a single node.

If the parameter object is not one of the above classes, it is converted according to the following rules. Common language runtime (CLR) numeric types are converted to Double. The DateTime type is converted to String. IXPathNavigable types are converted to XPathNavigator. XPathNavigator[] is converted to XPathNodeIterator.

All other types throw an error.

The following example uses the AddParam method to create a parameter to hold calculated discount date. The discount date is calculated to be 20 days from the order date.

using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

public class Sample {

   public static void Main() {

      // Create the XslCompiledTransform and load the style sheet.
      XslCompiledTransform xslt = new XslCompiledTransform();
      xslt.Load("discount.xsl");

      // Create the XsltArgumentList.
      XsltArgumentList argList = new XsltArgumentList();

      // Calculate the discount date.
      DateTime orderDate = new DateTime(2004, 01, 15);
      DateTime discountDate = orderDate.AddDays(20);
      argList.AddParam("discount", "", discountDate.ToString());

      // Create an XmlWriter to write the output.             
     XmlWriter writer = XmlWriter.Create("orderOut.xml");

     // Transform the file.
     xslt.Transform(new XPathDocument("order.xml"), argList, writer);
     writer.Close();

  }

}

<!--Represents a customer order-->
<order>
  <book ISBN='10-861003-324'>
    <title>The Handmaid's Tale</title>
    <price>19.95</price>
  </book>
  <cd ISBN='2-3631-4'>
    <title>Americana</title>
    <price>16.95</price>
  </cd>
</order>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="discount"/>
  <xsl:template match="/">
    <order>
      <xsl:variable name="sub-total" select="sum(//price)"/>
      <total><xsl:value-of select="$sub-total"/></total>
           15% discount if paid by: <xsl:value-of select="$discount"/>
     </order>
  </xsl:template>
</xsl:stylesheet>

<?xml version="1.0" encoding="utf-8"?>
<order>
  <total>36.9</total>
     15% discount if paid by: 2/4/2004 12:00:00 AM
</order>
Show:
© 2014 Microsoft