Как перейти с XslTransform на XslCompiledTransform
У меня есть следующий код, который мне нужно перенести с VS 2003 (.Net 1.1) на VS 2008 (.Net 2+), но я получаю ошибку компиляции -
System.Xml.Xsl.XslTransform 'устарел: этот класс устарел. Мне, вероятно, нужно использовать System.Xml.Xsl.XslCompiledTransform вместо этого. но я не нахожу подходящих версий перегрузки Load() и Transform(), которые я могу использовать со всеми параметрами моего исходного кода.
в MSDN [Как: перенести код XslTransform] Я нашел только несколько простых случаев. http://msdn.microsoft.com/en-us/library/aa983475%28VS.80%29.aspx но в моем коде я вижу некоторые замечания, которые намекают на то, что добавленные параметры использовались, чтобы избежать исключений, поэтому я предпочитаю использовать эти параметры.
Может кто-нибудь, пожалуйста, помогите перенести этот код?
Спасибо, Атара
' ----------------------------------------------------------------------
' 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
' ----------------------------------------------------------------------
в моем старом коде у меня есть и xmlDoc, и xslDoc, поэтому скомпилированный код, который я сейчас имею (еще не тестировал):
'------------------------------------------------- ---------------------
Пробный код 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())
1 ответ
Эти дополнительные параметры больше не отображаются непосредственно XsltCompiledTransform
учебный класс. Теперь вы можете загрузить преобразование, используя любой XmlReader
что тебе нравится.
Если вам нужна дополнительная безопасность, создайте XmlReader
который использует 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