Freigeben über


XsltArgumentList.AddExtensionObject(String, Object) Methode

Definition

Fügt der XsltArgumentList ein neues Objekt hinzu und ordnet es dem Namespace-URI zu.

public:
 void AddExtensionObject(System::String ^ namespaceUri, System::Object ^ extension);
public void AddExtensionObject (string namespaceUri, object extension);
member this.AddExtensionObject : string * obj -> unit
Public Sub AddExtensionObject (namespaceUri As String, extension As Object)

Parameter

namespaceUri
String

Der Namespace-URI, der dem Objekt zugeordnet werden soll. Um den Standardnamespace verwenden zu können, geben Sie eine leere Zeichenfolge an.

extension
Object

Das Objekt, das der Liste hinzugefügt werden soll.

Ausnahmen

namespaceUri ist entweder null oder http://www.w3.org/1999/XSL/Transform.

Dem namespaceUri ist bereits ein Erweiterungsobjekt zugeordnet.

Der Aufrufer verfügt nicht über ausreichende Berechtigungen zum Aufrufen dieser Methode.

Beispiele

Im folgenden Beispiel verwendet das Stylesheet ein XSLT-Erweiterungsobjekt, um den Buchpreis zu konvertieren.

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 stylesheet.
    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("prices.xsl");

    // Create an XsltArgumentList.
    XsltArgumentList xslArg = new XsltArgumentList();

    // Add an object to calculate the new book price.
    BookPrice obj = new BookPrice();
    xslArg.AddExtensionObject("urn:price-conv", obj);

    using (XmlWriter w = XmlWriter.Create("output.xml"))
    {
        // Transform the file.
        xslt.Transform("books.xml", xslArg, w);
    }
  }

  // Convert the book price to a new price using the conversion factor.
  public class BookPrice{

    private decimal newprice = 0;
        
    public decimal NewPriceFunc(decimal price, decimal conv){
       decimal tmp = price*conv;
       newprice = decimal.Round(tmp, 2);
       return newprice;
    }
  }
}
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 stylesheet.
        Dim xslt As New XslCompiledTransform()
        xslt.Load("prices.xsl")
        
        ' Create an XsltArgumentList.
        Dim xslArg As New XsltArgumentList()
        
        ' Add an object to calculate the new book price.
        Dim obj As New BookPrice()
        xslArg.AddExtensionObject("urn:price-conv", obj)
        
        
        Using w As XmlWriter = XmlWriter.Create("output.xml")
            ' Transform the file.
            xslt.Transform("books.xml", xslArg, w)
        End Using


    
    End Sub
    
    ' Convert the book price to a new price using the conversion factor.    
    Public Class BookPrice
        
        Private newprice As Decimal = 0
                
        Public Function NewPriceFunc(ByVal price As Decimal, ByVal conv As Decimal) As Decimal 
            Dim tmp As Decimal = price * conv
            newprice = Decimal.Round(tmp, 2)
            Return newprice        
        End Function 'NewPriceFunc

    End Class

End Class

Im Beispiel werden die folgenden Datendateien als Eingabe verwendet.

books.xml

<bookstore>
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

prices.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:myObj="urn:price-conv">

<!--Price conversion factor-->
<xsl:param name="conv" select="1.15"/>

  <xsl:template match="bookstore">
  <bookstore>
  <xsl:for-each select="book">
    <book>
    <xsl:copy-of select="node()"/>
       <new-price>
          <xsl:value-of select="myObj:NewPriceFunc(./price, $conv)"/>        
       </new-price>
    </book>
  </xsl:for-each>
  </bookstore>
  </xsl:template>
</xsl:stylesheet>

Hinweise

Das params Schlüsselwort, mit dem eine nicht angegebene Anzahl von Parametern übergeben werden kann, wird derzeit nicht unterstützt. XSLT-Stylesheets, die mit dem params Schlüsselwort definierte Methoden verwenden, funktionieren nicht ordnungsgemäß. Weitere Informationen finden Sie unter params.

Gilt für:

Weitere Informationen