Ata*_*ara 5 xml vb.net xmldocument 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
' ----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
在我的旧代码中我有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())
Run Code Online (Sandbox Code Playgroud)
这些额外的参数不再由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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4689 次 |
| 最近记录: |