加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 如何从XslTransform迁移到XslCompiledTransform

发布时间:2020-12-16 23:30:27 所属栏目:百科 来源:网络整理
导读:我有以下代码需要从VS 2003(.Net 1.1)迁移到VS 2008(.Net 2) 但我得到编译错误 – System.Xml.Xsl.XslTransform’已过时:已弃用此类. 我可能需要使用System.Xml.Xsl.XslCompiledTransform. 但我没有找到匹配的Load()和Transform()重载版本,我可以使用我的原
我有以下代码需要从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
但在我的代码中,我看到一些评论暗示添加的参数用于避免异常,所以我更喜欢使用这些参数.

有人可以帮助迁移此代码吗?

谢谢,
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

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

在我的旧代码中我有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,contentWriter)  
  Catch ex As Exception
    Debug.WriteLine("Exception: {0}",ex.ToString())
  End Try

  DoSomething(sbContent.ToString())

解决方法

这些额外的参数不再由XsltCompiledTransform类直接公开.您现在可以使用您喜欢的任何XmlReader加载转换.

如果您需要额外的安全性,那么创建一个使用XmlSecureResolver的XmlReader:

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,contentWriter,Nothing)
            End Using
        End Using
    End Using
End Sub

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读