XSLT-Parameter

Aktualisiert: November 2007

XSLT-Parameter werden der XsltArgumentList mithilfe der AddParam-Methode hinzugefügt. Dabei werden ein qualifizierter Name und ein Namespace-URI (Uniform Resource Identifier) mit dem Parameterobjekt verknüpft.

So verwenden Sie einen XSLT-Parameter

  1. Erstellen Sie ein XsltArgumentList-Objekt, und fügen Sie den Parameter mit der AddParam-Methode hinzu.

  2. Rufen Sie den Parameter aus dem Stylesheet auf.

  3. Übergeben Sie das XsltArgumentList-Objekt an die Transform-Methode.

Parametertypen

Das Parameterobjekt sollte einem W3C-Typ entsprechen. In der folgenden Tabelle sind die jeweiligen W3C-Typen mit den entsprechenden Microsoft .NET-Klassen (Typen) aufgelistet. Weiterhin wird angegeben, ob es sich bei dem W3C-Typ um einen XPath-Typ oder einen XSLT-Typ handelt.

W3C-Typ

Entsprechende .NET-Klasse (Typ)

XPath-Typ oder 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

*Dies entspricht einer Knotengruppe, die einen Knoten enthält.

Wenn das Parameterobjekt keiner der oben genannten Klassen entspricht, wird es entsprechend der folgenden Regeln konvertiert. Numerische CLR-Typen (Common Language Runtime) werden in Double konvertiert. Der DateTime-Typ wird in String konvertiert. IXPathNavigable-Typen werden in XPathNavigator konvertiert. XPathNavigator[] wird konvertiert in XPathNodeIterator.

Alle anderen Typen lösen einen Fehler aus.

Beispiel

Im folgenden Beispiel wird mit der AddParam-Methode ein Parameter erstellt, der ein berechnetes Skontodatum enthält. Das Skontodatum ist 20 Tage nach dem Auftragsdatum.

Imports System
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
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();

  }

}

Eingabe

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>

Ausgabe

<?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>

Siehe auch

Weitere Ressourcen

XSLT-Transformationen