XSLT-parametrar
XSLT-parametrar läggs till med hjälp av XsltArgumentListAddParam metoden. Ett kvalificerat namn och en namnområdes-URI associeras med parameterobjektet vid den tidpunkten.
Så här använder du en XSLT-parameter
Skapa ett XsltArgumentList objekt och lägg till parametern med hjälp av AddParam -metoden.
Anropa parametern från formatmallen.
Skicka objektet XsltArgumentList till Transform -metoden.
Parametertyper
Parameterobjektet ska motsvara en W3C-typ. I följande tabell visas motsvarande W3C-typer, motsvarande Microsoft .NET-klasser (typ) och om W3C-typen är en XPath-typ eller XSLT-typ.
W3C-typ | Motsvarande .NET-klass (typ) | XPath- eller XSLT-typ |
---|---|---|
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 |
*Detta motsvarar en noduppsättning som innehåller en enda nod.
Om parameterobjektet inte är en av klasserna ovan konverteras det enligt följande regler. Numeriska typer av common language runtime (CLR) konverteras till Double. Typen DateTime konverteras till String. IXPathNavigable -typer konverteras till XPathNavigator. XPathNavigator[] konverteras till XPathNodeIterator.
Alla andra typer utlöser ett fel.
Exempel
I följande exempel används AddParam metoden för att skapa en parameter för att lagra beräknat rabattdatum. Rabattdatumet beräknas till 20 dagar från orderdatumet.
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();
}
}
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Imports System.Xml.Xsl
public class Sample
public shared sub Main()
' Create the XslCompiledTransform and load the style sheet.
Dim xslt as XslCompiledTransform = new XslCompiledTransform()
xslt.Load("discount.xsl")
' Create the XsltArgumentList.
Dim argList as XsltArgumentList = new XsltArgumentList()
' Calculate the discount date.
Dim orderDate as DateTime = new DateTime(2004, 01, 15)
Dim discountDate as DateTime = orderDate.AddDays(20)
argList.AddParam("discount", "", discountDate.ToString())
' Create an XmlWriter to write the output.
Dim writer as XmlWriter = XmlWriter.Create("orderOut.xml")
' Transform the file.
xslt.Transform(new XPathDocument("order.xml"), argList, writer)
writer.Close()
end sub
end class
Indata
order.xml
<!--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>
discount.xsl
<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>
Output
<?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>