Implementazione del processore XSLT da parte della classe XslTransformXslTransform Class Implements the XSLT Processor

Nota

La classe XslTransform è obsoleta in .NET Framework 2.0.NET Framework 2.0.The XslTransform class is obsolete in the .NET Framework 2.0.NET Framework 2.0. È possibile eseguire le trasformazioni XSLT (Extensible Stylesheet Language for Transformations) usando la classe XslCompiledTransform.You can perform Extensible Stylesheet Language for Transformations (XSLT) transformations using the XslCompiledTransform class. Per altre informazioni, vedere Utilizzo della classe XslCompiledTransform e Migrazione dalla classe XslTransform.See Using the XslCompiledTransform Class and Migrating From the XslTransform Class for more information.

La classe XslTransform è un processore XSLT che implementa la raccomandazione XSL Transformations (XSLT) Version 1.0.The XslTransform class is an XSLT processor implementing the XSL Transformations (XSLT) Version 1.0 recommendation. Il metodo Load individua e legge i fogli di stile, mentre il metodo Transform trasforma il documento di origine.The Load method locates and reads style sheets, and the Transform method transforms the given source document. Come documento di origine per IXPathNavigable può essere usato qualsiasi archivio che implementi l'interfaccia XslTransform.Any store that implements the IXPathNavigable interface can be used as the source document for the XslTransform. Poiché .NET Framework.NET Framework implementa attualmente l'interfaccia IXPathNavigable nel XmlDocument, XmlDataDocument e XPathDocument, è possibile usare uno qualsiasi di questi elementi come documento di origine di input per una trasformazione.The .NET Framework.NET Framework currently implements the IXPathNavigable interface on the XmlDocument, the XmlDataDocument, and the XPathDocument, so all of these can be used as the input source document to a transformation.

L'oggetto XslTransform in .NET Framework.NET Framework supporta solo la specifica XSLT 1.0, definita con lo spazio dei nomi seguente:The XslTransform object in the .NET Framework.NET Framework only supports the XSLT 1.0 specification, defined with the following namespace:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">    

Usando il metodo Load, è possibile caricare il foglio di stile da una delle seguenti classi:The style sheet can be loaded, using the Load method, from one of the following classes:

  • XPathNavigatorXPathNavigator

  • XmlReaderXmlReader

  • Una stringa che rappresenta un URLA string representing a URL

Per ognuna delle classi di input sopra riportate, esiste un diverso metodo Load.There is a different Load method for each of the above input classes. Alcuni metodi richiedono come argomento una combinazione di una di queste classi con la classe XmlResolver.Some methods take in a combination of one of these classes and the XmlResolver class as arguments. L'oggetto XmlResolver consente di individuare le risorse a cui <xsl:import> o <xsl:include> fa riferimento nel foglio di stile.The XmlResolver locates resources referenced by <xsl:import> or <xsl:include> found in the style sheet. Per i metodi seguenti, viene usata come input una stringa XmlReader o XPathNavigator.The following methods take a string, XmlReader, or XPathNavigator as input.

Overloads Public Sub Load(String)  
public void Load(string);  
Overloads Public Sub Load(String, XmlResolver)  
public void Load(string, XmlResolver);  
Overloads Public Sub Load(XmlReader, XmlResolver, Evidence)  
public void Load(XmlReader, XmlResolver, Evidence);  
Overloads Public Sub Load(XPathNavigator, XmlResolver, Evidence)  
public void Load(XPathNavigator, XmlResolver, Evidence);  

Molti dei metodi Load sopra descritti accettano come parametro XmlResolver.Most of the Load methods shown above take an XmlResolver as a parameter. L'oggetto XmlResolver consente di caricare il foglio di stile e qualsiasi altro eventuale foglio di stile a cui viene fatto riferimento negli elementi xsl:import e xsl:include.The XmlResolver is used to load the style sheet and any style sheet(s) referenced in xsl:import and xsl:include elements.

Molti dei metodi Load accettano come parametro anche Evidence,Most of the Load methods also take evidence as a parameter. Evidence è il parametro Evidence associato al foglio di stile.The evidence parameter is the Evidence that is associated with the style sheet. Il livello di sicurezza del foglio di stile influenza il livello di sicurezza delle eventuali risorse a cui esso fa riferimento successivamente, quali lo script contenuto, le funzioni document() usate e gli oggetti di estensione usati da XsltArgumentList.The security level of the style sheet affects the security level of any subsequent resources it references, such as the script it contains, any document() functions it uses, and any extension objects used by the XsltArgumentList.

Se il foglio di stile viene caricato usando il metodo Load contenente un parametro URL e nessun parametro evidence, l'evidenza del foglio di stile viene calcolata combinando l'URL con il sito e la zona relativi.If the style sheet is loaded using a Load method that contains a URL parameter and no evidence is provided, the evidence of the style sheet is calculated by combining the given URL with its site and zone.

Se i parametri URI ed Evidence non vengono forniti, il parametro Evidence impostato per il foglio di stile è completamente attendibile.If no URI or evidence is provided, then the evidence set for the style sheet is fully trusted. Non caricare fogli di stile da origini non attendibili né aggiungere a XsltArgumentList oggetti di estensione non attendibili.Do not load style sheets from untrusted sources, or add untrusted extension objects into the XsltArgumentList.

Per altre informazioni sui livelli di sicurezza, sul parametro Evidence e su come questi influiscono sugli script, vedere Scripting dei fogli di stile XSLT con <msxsl:script>.For more information about security levels and evidence and how it affects scripting, see XSLT Stylesheet Scripting Using <msxsl:script>. Per altre informazioni sui livelli di sicurezza, sul parametro Evidence e su come questi influiscono sugli oggetti di estensione, vedere XsltArgumentList per i parametri dei fogli di stile e gli oggetti di estensione.For information about security levels and evidence and how it affects extension objects, see XsltArgumentList for Style Sheet Parameters and Extension Objects.

Per altre informazioni sui livelli di sicurezza, sul parametro Evidence e su come questi influiscono sulla funzione document(), vedere Risoluzione di fogli di stile e documenti XSLT esterni.For information about security levels and evidence and how it affects the document() function, see Resolving External XSLT Style Sheets and Documents.

Insieme al foglio di stile è possibile fornire vari parametri di input.A style sheet can be supplied with a number of input parameters. È inoltre possibile usare il foglio di stile per chiamare le funzioni sugli oggetti di estensione.The style sheet can also call functions on extension objects. Sia i parametri che gli oggetti di estensione vengono forniti al foglio di stile mediante la classe XsltArgumentList.Both parameters and extension objects are supplied to the style sheet using the XsltArgumentList class. Per altre informazioni su XsltArgumentList, vedere XsltArgumentList.For more information about the XsltArgumentList, see XsltArgumentList.

I privilegi di sicurezza del foglio di stile dipendono dal parametro Evidence fornito.The security privileges of the style sheet depend on the evidence provided. Nella tabella seguente vengono riportate la provenienza del foglio di stile e una spiegazione relativa al tipo di evidenza da fornire.The following table summarizes the location of the style sheet and gives an explanation of what type of evidence to give.

  • Il foglio di stile XSLT non ha riferimenti esterni oppure proviene da un codebase attendibile.The XSLT style sheet has no external references, or the style sheet comes from a code base that you trust.

    • Fornire l'evidenza dall'assembly:Provide the evidence from your assembly:

      Dim xslt = New XslTransform() xslt.Load(stylesheet, resolver, Me.GetType().Assembly.Evidence)

      XsltTransform xslt = new XslTransform(); xslt.Load(stylesheet, resolver, this.GetType().Assembly.Evidence);

  • Il foglio di stile XSLT proviene da un'origine esterna.The XSLT style sheet comes from an outside source. conosciuta e con un URI verificabile.The origin of the source is known and there is a verifiable URI.

    • Fornire l'evidenza usando l'URI.Create evidence using the URI.

      Dim xslt As New XslTransform() Dim ev As Evidence = XmlSecureResolver.CreateEvidenceForUrl(stylesheetUri) xslt.Load(stylesheet, resolver, evidence)

      XslTransform xslt = new XslTransform(); Evidence ev = XmlSecureResolver.CreateEvidenceForUrl(stylesheetUri); xslt.Load(stylesheet, resolver, evidence);

  • Il foglio di stile XSLT proviene da un'origine esterna.The XSLT style sheet comes from an outside source. Tale origine non è nota.The origin of the source is not known.

    • Impostare evidence su null.Set evidence to null. I blocchi di script non verranno elaborati, la funzione XSLT document() non è supportata e gli oggetti estensioni privilegiati verranno disattivati.Script blocks are not processed, the XSLT document() function is not supported, and privileged extension objects are disallowed.

      Inoltre, è possibile impostare anche il parametro resolver su null, in modo tale che gli elementi xsl:import e xsl:include non vengano elaborati.Additionally, you can also set the resolver parameter to null This ensures that xsl:import and xsl:include elements are not processed.

  • Il foglio di stile XSLT proviene da un'origine esterna.The XSLT style sheet comes from an outside source. Tale origine non è nota, ma è necessario il supporto degli script.The origin of the source is not known, but you require script support.

    • Richiedere l'evidenza dal chiamante.Request evidence from the caller.

Trasformazione dei dati XMLTransformation of XML Data

Una volta caricato il foglio di stile, la trasformazione viene avviata chiamando uno dei metodi Transform e fornendo un documento di origine di input.Once a style sheet is loaded, the transformation starts by calling one of the Transform methods and supplying an input source document. Viene eseguito l'overload del metodo Transform per fornire output di trasformazione diversi.The Transform method is overloaded to provide different transformation outputs. La trasformazione può dare luogo ai seguenti formati di output:The transformation can result in the following output formats:

Quest'ultimo formato, l'URL di stringa, è utile in uno scenario comunemente usato in cui un documento di input situato in un URL viene trasformato e scritto nell'URL di output.This last format, the string URL, provides for a commonly used scenario in transforming an input document located in a URL and writing the document to the output URL. Questo metodo Transform è pratico quando si tratta di caricare un documento XML da un file, eseguire la trasformazione XSLT e scrivere l'output in un file.This Transform method is a convenience method to load an XML document from a file, perform the XSLT transformation, and write the output to a file. Questo evita all'utente di dover creare e caricare il documento di origine di input e quindi scrivere in un flusso di file.This prevents you from having to create and load the input source document, and then write to a file stream. Nell'esempio di codice seguente viene illustrato l'uso del metodo Transform con l'URL di stringa come input e output:The following code sample shows this use of the Transform method using the string URL as input and output:

Dim xsltransform As XslTransform = New XslTransform()  
xsltransform.Load("favorite.xsl")  
xsltransform.Transform("MyDocument.Xml", "TransformResult.xml", Nothing)  
XslTransform xsltransform = new XslTransform();  
xsltransform.Load("favorite.xsl");  
xsltransform.Transform("MyDocument.xml", "TransformResult.xml", null);  

Trasformazione di una sezione di un documento XMLTransforming a Section of an XML Document

Le trasformazioni si applicano all'intero documento.Transformations apply to the document as a whole. In altre parole, se viene passato un nodo diverso dal nodo radice del documento, il processo di trasformazione accederà comunque a tutti i nodi nel documento caricato.In other words, if you pass in a node other than the document root node, this does not prevent the transformation process from accessing all nodes in the loaded document. Per trasformare un frammento di albero risultato, è necessario creare un XmlDocument contenente solo il frammento di nodo e passare tale XmlDocument al metodo Transform.To transform a result tree fragment, you must create an XmlDocument containing just the result tree fragment and pass that XmlDocument to the Transform method. Nell'esempio seguente viene eseguita una trasformazione in un frammento di albero risultato.The following example performs a transformation on a result tree fragment.

Dim xslt As New XslTransform()  
xslt.Load("print_root.xsl")  
Dim doc As New XmlDocument()  
doc.Load("library.xml")  
' Create a new document containing just the result tree fragment.  
Dim testNode As XmlNode = doc.DocumentElement.FirstChild  
Dim tmpDoc As New XmlDocument()  
tmpDoc.LoadXml(testNode.OuterXml)  
' Pass the document containing the result tree fragment   
' to the Transform method.  
Console.WriteLine(("Passing " + tmpDoc.OuterXml + " to print_root.xsl"))  
xslt.Transform(tmpDoc, Nothing, Console.Out, Nothing)  
XslTransform xslt = new XslTransform();       
xslt.Load("print_root.xsl");  
XmlDocument doc = new XmlDocument();  
doc.Load("library.xml");  
// Create a new document containing just the result tree fragment.  
XmlNode testNode = doc.DocumentElement.FirstChild;   
XmlDocument tmpDoc = new XmlDocument();   
tmpDoc.LoadXml(testNode.OuterXml);  
// Pass the document containing the result tree fragment   
// to the Transform method.  
Console.WriteLine("Passing " + tmpDoc.OuterXml + " to print_root.xsl");  
xslt.Transform(tmpDoc, null, Console.Out, null);  

Nell'esempio vengono usati come input i file library.xml e print_root.xsl e alla console viene restituito l'output seguente:The example uses the library.xml and print_root.xsl files as input and outputs the following to the console.

Passing <book genre="novel" ISBN="1-861001-57-5"><title>Pride And Prejudice</title></book> to print_root.xsl   
Root node is book.  

library.xmllibrary.xml

<library>  
  <book genre='novel' ISBN='1-861001-57-5'>  
     <title>Pride And Prejudice</title>  
  </book>  
  <book genre='novel' ISBN='1-81920-21-2'>  
     <title>Hook</title>  
  </book>  
</library>  

print_root.xslprint_root.xsl

<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform" >  
  <output method="text" />   
  <template match="/">  
     Root node is  <value-of select="local-name(//*[position() = 1])" />   
  </template>  
</stylesheet>  

Migrazione di XSLT da .NET Framework versione 1.0 a .NET Framework versione 1.1Migration of XSLT from .NET Framework version 1.0 to .NET Framework version 1.1

Nella tabella seguente vengono illustrati i metodi obsoleti della versione 1.0 .NET Framework.NET Framework e i nuovi metodi della versione 1.1 .NET Framework.NET Framework per il metodo Load.The following table shows the obsolete .NET Framework.NET Framework version 1.0 methods and new .NET Framework.NET Framework version 1.1 methods for the Load method. I nuovi metodi consentono di limitare le autorizzazioni del foglio di stile specificando il parametro Evidence.The new methods enable you to limit the permissions of the style sheet by specifying evidence.

Metodi Load obsoleti di .NET Framework versione 1.0Obsolete .NET Framework version 1.0 Load Methods Metodi Load sostitutivi di .NET Framework versione 1.1Replacement .NET Framework version 1.1 Load Methods
Load(input XPathNavigator);Load(XPathNavigator input);

Load(input XPathNavigator, sistema di risoluzione XmlResolver);Load(XPathNavigator input, XmlResolver resolver);
Load(foglio di stile XPathNavigator, sistema di risoluzione XmlResolver, evidenza Evidence);Load(XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence);
Load(foglio di stile IXPathNavigable);Load(IXPathNavigable stylesheet);

Load(foglio di stile IXPathNavigable, sistema di risoluzione XmlResolver);Load(IXPathNavigable stylesheet, XmlResolver resolver);
Load(foglio di stile IXPathNavigable, sistema di risoluzione XmlResolver, evidenza Evidence);Load(IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence);
Load(foglio di stile XmlReader);Load(XmlReader stylesheet);

Load(foglio di stile XmlReader, sistema di risoluzione XmlResolver);Load(XmlReader stylesheet, XmlResolver resolver);
Load(foglio di stile XmlReader, sistema di risoluzione XmlResolver, evidenza Evidence);Load(XmlReader stylesheet, XmlResolver resolver, Evidence evidence);

Nella tabella seguente vengono illustrati i metodi obsoleti e quelli nuovi per il metodo Transform.The following table shows the obsolete and new methods for the Transform method. I nuovi metodi accettano un oggetto XmlResolver.The new methods take an XmlResolver object.

Metodi Transform di .NET Framework versione 1.0Obsolete .NET Framework version 1.0 Transform Methods Metodi Transform sostitutivi di .NET Framework versione 1.1Replacement .NET Framework version Transform 1.1 Methods
XmlReader Transform(input XPathNavigator, argomenti XsltArgumentList)XmlReader Transform(XPathNavigator input, XsltArgumentList args) XmlReader Transform(input XPathNavigator, argomenti XsltArgumentList, sistema di risoluzione XmlResolver)XmlReader Transform(XPathNavigator input, XsltArgumentList args, XmlResolver resolver)
XmlReader Transform(input IXPathNavigable, argomenti XsltArgumentList)XmlReader Transform(IXPathNavigable input, XsltArgumentList args) XmlReader Transform(input IXPathNavigable, arg XsltArgumentList, sistema di risoluzione XmlResolver)XmlReader Transform(IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)
Void Transform(input XPathNavigator, argomenti XsltArgumentList, output XmlWriter)Void Transform(XPathNavigator input, XsltArgumentList args, XmlWriter output) Void Transform(input XPathNavigator, argomenti XsltArgumentList, output XmlWriter, sistema di risoluzione XmlResolver)Void Transform(XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
Void Transform(input IXPathNavigable, argomenti XsltArgumentList, output XmlWriter)Void Transform(IXPathNavigable input, XsltArgumentList args, XmlWriter output) Void Transform(input IXpathNavigable, argomenti XsltArgumentList, output XmlWriter, sistema di risoluzione XmlResolver)Void Transform(IXpathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
Void Transform(input XPathNavigator, argomenti XsltArgumentList, output TextWriter)Void Transform(XPathNavigator input, XsltArgumentList args, TextWriter output) Void Transform(input XPathNavigator, arg XsltArgumentList, output TextWriter, sistema di risoluzione XmlResolver)Void Transform(XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
Void Transform(input IXPathNavigable, argomenti XsltArgumentList, output TextWriter)Void Transform(IXPathNavigable input, XsltArgumentList args, TextWriter output) Void Transform(input IXPathNavigable, argomenti XsltArgumentList, output TextWriter, sistema di risoluzione XmlResolver)Void Transform(IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
Void Transform(input XPathNavigator, argomenti XsltArgumentList, output Stream)Void Transform(XPathNavigator input, XsltArgumentList args, Stream output) Void Transform(input XPathNavigator, arg XsltArgumentList, output Stream, sistema di risoluzione XmlResolver)Void Transform(XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
Void Transform(input IXPathNavigable, argomenti XsltArgumentList, output Stream)Void Transform(IXPathNavigable input, XsltArgumentList args, Stream output) Void Transform(input IXPathNavigable, argomenti XsltArgumentList, output Stream, sistema di risoluzione XmlResolver)Void Transform(IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)
Void Transform(input String, output String)Void Transform(String input, String output); Void Transform(input String, output String, sistema di risoluzione XmlResolver)Void Transform(String input, String output, XmlResolver resolver);

La proprietà XslTransform.XmlResolver è obsoleta in .NET Framework.NET Framework versione 1.1.The XslTransform.XmlResolver property is obsolete in .NET Framework.NET Framework version 1.1. Al suo posto è possibile usare i nuovi overload Transform con un oggetto XmlResolver.Instead, use the new Transform overloads which take an XmlResolver object.

Vedere ancheSee Also

XslTransform
Trasformazioni XSLT con la classe XslTransformXSLT Transformations with the XslTransform Class
XPathNavigator nelle trasformazioniXPathNavigator in Transformations
XPathNodeIterator nelle trasformazioniXPathNodeIterator in Transformations
Input di XPathDocument in XslTransformXPathDocument Input to XslTransform
Input di XmlDataDocument in XslTransformXmlDataDocument Input to XslTransform
Input di XmlDocument in XslTransformXmlDocument Input to XslTransform