I have the following code that I need to migrate from VS 2003 (.Net 1.1) to VS 2008 (.Net 2+) but I get compilation error -
System.Xml.Xsl.XslTransform' is obsolete: This class has been deprecated. I probably need to use System.Xml.Xsl.XslCompiledTransform instead. but I do not find the matching Load() and Transform() overload versions that I can use with all the parameters of my original code.
in MSDN [How to: Migrate Your XslTransform Code] I only found some simpler cases. http://msdn.microsoft.com/en-us/library/aa983475%28VS.80%29.aspx but in my code I see some remarks that hints that the added parameters were used to avoid exceptions, so I prefer to use these parameters.
Can someone please help migrating this code?
Thanks, Atara
' ----------------------------------------------------------------------
' VS 2003 code:
' ----------------------------------------------------------------------
. . .
Dim myXslDoc As Xml.XmlDocument
' ----------------------------------------------------------------------
Public Sub mcSetParameters(ByVal srcFileName As String)
' ----------------------------------------------------------------------
Me.myXslDoc = New Xml.XmlDocument
Me.myXslDoc.Load(srcFileName)
End Sub
' ----------------------------------------------------------------------
Public Sub mcSetHtml()
' ----------------------------------------------------------------------
Dim oXPathNav As System.Xml.XPath.XPathNavigator = xmlDoc.DocumentElement.CreateNavigator()
Dim sbContent As New System.Text.StringBuilder
Dim swContent As New System.IO.StringWriter(sbContent)
Dim args As New System.Xml.Xsl.XsltArgumentList
args.AddParam("paramName1", "", paramVal1.ToString)
args.AddParam("paramName2", "", paramVal2.ToString)
Try
' Try to avoid "Invalid site" exception, by using XmlUrlResolver and Evidence.
' If the XSLT stylesheet . . . comes from a code base that you trust, Then use Me.GetType().Assembly.Evidence()
Dim resolver As System.Xml.XmlUrlResolver = New System.Xml.XmlUrlResolver
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim xslt As System.Xml.Xsl.XslTransform = New System.Xml.Xsl.XslTransform
xslt.Load(Me.myXslDoc, resolver, Me.GetType().Assembly.Evidence())
xslt.Transform(oXPathNav, args, swContent, Nothing)
Catch ex As Exception
Debug.WriteLine("Exception: {0}", ex.ToString())
End Try
DoSomething(sbContent.ToString())
End Sub
' ----------------------------------------------------------------------
in my old code I have both xmlDoc and xslDoc, so the compiled code I have now (not tested yet) is:
' ----------------------------------------------------------------------
' VS 2008 trial code:
' ----------------------------------------------------------------------
Dim sbContent As System.Text.StringBuilder = New System.Text.StringBuilder()
Dim swContent As System.IO.StringWriter = New System.IO.StringWriter(sbContent)
Dim contentWriter As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(swContent)
Dim args As New System.Xml.Xsl.XsltArgumentList()
args.AddParam("paramName1", "", paramVal1.ToString)
args.AddParam("paramName2", "", paramVal2.ToString)
Try
Dim resolver As New System.Xml.XmlUrlResolver
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim evidence As System.Security.Policy.Evidence = Me.GetType().Assembly.Evidence
Dim secureResolver As New System.Xml.XmlSecureResolver(resolver, evidence)
Dim settings As New System.Xml.Xsl.XsltSettings(False, True)
Dim xslt As New System.Xml.Xsl.XslCompiledTransform()
xslt.Load(Me.myXslDoc, settings, secureResolver)
xslt.Transform(xmlDoc, args, contentWriter)
Catch ex As Exception
Debug.WriteLine("Exception: {0}", ex.ToString())
End Try
DoSomething(sbContent.ToString())
Those extra parameters are no longer exposed directly by the XsltCompiledTransform
class. You can now load the transform using any XmlReader
that you like.
If you need the extra security, then create an XmlReader
that uses an XmlSecureResolver
:
Private MyXslDoc As String = "XslFilePath"
Public Sub LoadTransform(ByVal paramVal1 As Object, ByVal paramVal2 As Object)
Dim args As New System.Xml.Xsl.XsltArgumentList
args.AddParam("paramName1", "", paramVal1.ToString)
args.AddParam("paramName2", "", paramVal2.ToString)
Dim resolver As New System.Xml.XmlUrlResolver
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim evidence As Evidence = Me.GetType().Assembly.Evidence
Dim secureResolver As New XmlSecureResolver(resolver, evidence)
Dim settings As New XmlReaderSettings
settings.XmlResolver = secureResolver
Dim xslt As New System.Xml.Xsl.XslCompiledTransform()
Using transformReader As XmlReader = XmlReader.Create(Me.MyXslDoc, settings)
xslt.Load(transformReader)
End Using
Using documentReader As XmlReader = XmlReader.Create(documentUri)
Dim sbContent As New System.Text.StringBuilder
Using swContent As New System.IO.StringWriter(sbContent)
Using contentWriter As XmlWriter = XmlWriter.Create(swContent)
xslt.Transform(documentReader, args, contentWriter, Nothing)
End Using
End Using
End Using
End Sub
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With