Export (0) Print
Expand All

Migrating From the XslTransform Class 

The XSLT architecture has been redesigned in the Microsoft .NET Framework version 2.0 release. The XslTransform class has been replaced by the XslCompiledTransform class.

Performance

The XslCompiledTransform class includes many performance improvements. The new XSLT processor compiles the XSLT style sheet down to a common intermediate format, similar to what the common language runtime (CLR) does for other programming languages. Once the style sheet is compiled, it can be cached and reused.

The XslCompiledTransform class also includes other optimizations that make it much faster than the XslTransform class.

Security

The XslCompiledTransform class disables support for the XSLT document() function and embedded scripting by default. These features can be enabled by creating an XsltSettings object with the features enabled and passing it to the Load method.

For more information, see XSLT Security Considerations.

Migrating Code

The new XSLT classes have been designed to be very similar to the existing classes. The XslCompiledTransform class replaces the XslTransform class. Style sheets are compiled using the Load method. Transforms are executed using the Transform method. The following procedures show common XSLT tasks, and compare the code using the XslTransform class versus the XslCompiledTransform class.

To transform a file and output to a URI

Code using the XslTransform class.

XslTransform xslt = new XslTransform();
xslt.Load("output.xsl");
xslt.Transform("books.xml", "books.html");

Code using the XslCompiledTransform class.

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("output.xsl");
xslt.Transform("books.xml", "books.html");

To compile a style sheet and use a resolver with default credentials

Code using the XslTransform class.

XslTransform xslt = new XslTransform();
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;
xslt.Load("sort.xsl", resolver);

Code using the XslCompiledTransform class.

XslCompiledTransform xslt = new XslCompiledTransform();
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;
xslt.Load("sort.xsl", XsltSettings.Default, resolver);

To use an XSLT parameter

Code using the XslTransform class.

XslTransform xslt = new XslTransform();
xslt.Load("order.xsl");

//Create the XsltArgumentList.
XsltArgumentList argList = new XsltArgumentList();

//Create a parameter which represents the current date and time.
DateTime d = DateTime.Now;
argList.AddParam("date", "", d.ToString());

//Create the XmlTextWriter.
XmlTextWriter writer = new XmlTextWriter("output.xml", null);

//Transform the file.
xslt.Transform(new XPathDocument(filename), argList, writer, null);

Code using the XslCompiledTransform class.

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("order.xsl");

// Create the XsltArgumentList.
XsltArgumentList argList = new XsltArgumentList();

// Create a parameter which represents the current date and time.
DateTime d = DateTime.Now;
argList.AddParam("date", "", d.ToString());

// Create the XmlWriter. 
XmlWriter writer = XmlWriter.Create("output.xml", null);

// Transform the file.
xslt.Transform(new XPathDocument(filename), argList, writer);

To enable XSLT scripting

Code using the XslTransform class.

XslTransform xslt = new XslTransform();
xslt.Load("output.xsl");
xslt.Transform("books.xml", "books.html");

Code using the XslCompiledTransform class.

// Create the XsltSettings object with script enabled.
XsltSettings settings = new XsltSettings(false,true);

// Execute the transform.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("calc.xsl", settings, new XmlUrlResolver());
xslt.Transform("books.xml", "books.html");

To load the results into a DOM object

NoteNote

The XslCompiledTransform class does not have a method that returns the XSLT transformation results as an XmlReader object. However, you can output to an XML file and load the XML file into another object.

Code using the XslTransform class.

// Execute the transformation.
XslTransform xslt = new XslTransform();
xslt.Load("output.xsl");
XmlReader reader = xslt.Transform(new XPathDocument("books.xml"), null, new XmlUrlResolver());

// Load the results into a DOM object.
XmlDocument doc = new XmlDocument();
doc.Load(reader);

Code using the XslCompiledTransform class.

// Execute the transformation.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("output.xsl");
xslt.Transform("books.xml", "output.xml");

// Load the results into a DOM object.
XmlDocument doc = new XmlDocument();
doc.Load("output.xml");

To stream the results into another data store

Code using the XslTransform class.

// Execute the transformation.
XslTransform xslt = new XslTransform();
xslt.Load("output.xsl");
XmlReader reader = xslt.Transform(new XPathDocument("books.xml"), null, new XmlUrlResolver());

// Load the results into an XPathDocument object.
XPathDocument doc = new XPathDocument(reader);

Code using the XslCompiledTransform class.

// Execute the transformation.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("output.xsl");
MemoryStream ms = new MemoryStream();
xslt.Transform(new XPathDocument("books.xml"), null, ms);

// Load the results into an XPathDocument object.
ms.Seek(0, SeekOrigin.Begin);
XPathDocument doc = new XPathDocument(ms);

See Also

Show:
© 2014 Microsoft