XsltArgumentList.AddExtensionObject(String, Object) Metodo

Definizione

Aggiunge un nuovo oggetto all'oggetto XsltArgumentList e lo associa all'URI dello spazio dei nomi.

public:
 void AddExtensionObject(System::String ^ namespaceUri, System::Object ^ extension);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The stylesheet may have calls to methods of the extension object passed in which cannot be statically analyzed by the trimmer. Ensure all methods that may be called are preserved.")]
public void AddExtensionObject(string namespaceUri, object extension);
public void AddExtensionObject(string namespaceUri, object extension);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The stylesheet may have calls to methods of the extension object passed in which cannot be statically analyzed by the trimmer. Ensure all methods that may be called are preserved.")>]
member this.AddExtensionObject : string * obj -> unit
member this.AddExtensionObject : string * obj -> unit
Public Sub AddExtensionObject (namespaceUri As String, extension As Object)

Parametri

namespaceUri
String

URI dello spazio dei nomi da associare all'oggetto . Per usare lo spazio dei nomi predefinito, specificare una stringa vuota.

extension
Object

Oggetto da aggiungere all'elenco.

Attributi

Eccezioni

è namespaceUrinull o http://www.w3.org/1999/XSL/Transform

A namespaceUri tale oggetto è già associato un oggetto di estensione.

Il chiamante non dispone di autorizzazioni sufficienti per chiamare questo metodo.

Esempio

Nell'esempio seguente il foglio di stile utilizza un oggetto estensione XSLT per convertire il prezzo del libro.

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

Nell'esempio vengono usati i file di dati seguenti come input.

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>

Commenti

La params parola chiave , che consente di passare un numero non specificato di parametri, non è attualmente supportata. I fogli di stile XSLT che utilizzano metodi definiti con la params parola chiave non funzionano correttamente. Per altre informazioni, vedere parametri.

Si applica a

Vedi anche