2010-03-14 2 views
4

У меня есть следующий код, который мне нужно мигрировать с VS 2003 (.Net 1.1) в VS 2008 (.Net 2+) , но я получаю ошибку компиляции -Как перейти от XslTransform к XslCompiledTransform

системы. Xml.Xsl.XslTransform 'устарел: этот класс устарел. Вместо этого, вероятно, мне нужно использовать System.Xml.Xsl.XslCompiledTransform. , но я не могу найти соответствующие версии перегрузки Load() и Transform(), которые я могу использовать со всеми параметрами моего исходного кода.

в MSDN [Практическое руководство. Перенос вашего XslTransform Code] Я нашел только более простые случаи. 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()) 

ответ

2

Эти дополнительные параметры больше не подвергаются непосредственно классу 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 
+0

Спасибо. и как использовать XmlDocument в любой перегрузке xslt.Load()? – Atara

+0

@ Атара: работа над ней –

+0

@ Атара: проверьте код. Я не тестировал его, но он строит. –

Смежные вопросы