In .NET, the System.Xml.Xsl.XslTransform class is used for transforming XML data using an XSLT stylesheet. System.Xml.Xsl.XslTransform supports the XSLT 1.0 syntax, using the http://www.w3.org/1999/XSL/Transform namespace.
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Xml.XPath
Imports System.IO
Imports System.Text
' Use XPathDocument to transform the Xml String to Html String
'
' piXmlString - Xml String
' piXslPath - xsl file
' piArgumentList - an array of two dimension strings
' 1st dimension contains name and value
' 2nd dimension contains number of items
Public Function TransformXmlWithEncoding(ByRef piXmlString As String _
, ByVal piXslPath As String _
, ByVal piEncoding As String _
, Optional ByVal piArgumentList(,) As String = Nothing _
, Optional ByVal piEnableDocumentFunction As Boolean = False _
, Optional ByVal piEnableScript As Boolean = False) As String
' Create the XslTransform object.
Dim oXSL As New XslCompiledTransform
' Create the XsltSettings object with script enabled.
Dim oSettings As New XsltSettings(piEnableDocumentFunction, piEnableScript)
' load XSL object with style sheet
oXSL.Load(piXslPath, oSettings, New XmlUrlResolver())
Dim oXsltArgumentList As XsltArgumentList = Nothing
If Not piArgumentList Is Nothing Then
Dim count As Integer
Dim total As Integer
total = piArgumentList.GetUpperBound(1)
oXsltArgumentList = New XsltArgumentList()
For count = 0 To total
If piArgumentList(0, count) <> String.Empty Then
oXsltArgumentList.AddParam(piArgumentList(0, count), "", piArgumentList(1, count))
End If
Next
End If
' An object implementing the IXPathNavigable interface
Dim oPathDoc As New XPathDocument(New StringReader(piXmlString))
Dim sContent As String
Dim oStream As New System.IO.MemoryStream
Dim oEncoding As Encoding = Encoding.GetEncoding(piEncoding)
Dim oXmlTextWriter As New System.Xml.XmlTextWriter(oStream, oEncoding)
oXSL.Transform(oPathDoc, oXsltArgumentList, oXmlTextWriter)
oXmlTextWriter.Flush()
oStream.Position = 0
Dim oStreamReader As New StreamReader(oStream)
sContent = oStreamReader.ReadToEnd()
Return sContent
End Function