How to transfer from XslTransform to XslCompiledTransform

I have the following code that I need to port from VS 2003 (.Net 1.1) to VS 2008 (.Net 2+) but I get a compilation error -

System.Xml.Xsl.XslTransform 'is deprecated: this class is deprecated. I probably need to use System.Xml.Xsl.XslCompiledTransform. but I can’t find suitable versions of Load () and Transform () overload, which I can use with all parameters of my source code.

at MSDN [Practical Guide. XslTransform code porting] I found only a few simpler cases. http://msdn.microsoft.com/en-us/library/aa983475%28VS.80%29.aspx but in my code I see a few comments that the added parameters were used to throw exceptions, so I prefer to use these parameters .

Can someone help me migrate this code?

Thank you Atar

' ---------------------------------------------------------------------- ' 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 xmlDoc and xslDoc, so the compiled code that I have is (not yet verified):

'---------------------------------------------- --- ---------------------
"Trial code VS 2008:

'---------------------------------------------- --- ---------------------

  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()) 
+4
source share
1 answer

These additional parameters are no longer directly displayed by the XsltCompiledTransform class. Now you can load the conversion using any XmlReader that you like.

If you need extra security, create an XmlReader that uses the 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 
+2
source

Source: https://habr.com/ru/post/1304064/


All Articles