Exécuter un script vb.net lors d'une transformation xslt (v2)

Description

Lors d?un précédent post (http://www.aspfr.com/codes/EXECUTER-SCRIPT-VB-NET-LORS-TRANSFORMATION-XSLT_34008.aspx), j?avais montré comment exécuter du script vb.net lors d?une transformation Xslt. Cette source fonctionne toujours sur le framework 2.0 en utilisant le contrôle web « xml ».
Par contre si vous faites votre transformation à la main (ce qui est mon cas en ce moment? merce OpenXML), la sécurité par défaut ne permet pas d?exécuter les scripts. Dans la fonction GetXSLTransform, le bout de chose qui change par rapport à une transformation standard est le suivant :

Dim vXsltSettings As XsltSettings = New XsltSettings()
vXsltSettings.EnableScript = True
vXslt.Load(vXsltDocument, vXsltSettings, Nothing)

Je sais que je ne suis pas super clair? que ceux qui sont intéressés par cette technique me comprendront je pense ;-)

Source / Exemple :


'Fonction réaliser la tranformation xslt

    Public Shared Function GetXSLTransform(ByVal pXmlDocument As XmlDocument, ByVal pXslFile As String) As String

        'On charge le fichier XSL dans un XmlDocument 
        Dim vXsltDocument As XmlDocument = New XmlDocument()
        vXsltDocument.Load(pXslFile)

        'Création du lecteur XML 
        Dim vXsltDocumentReader As XmlNodeReader = New XmlNodeReader(pXmlDocument)

        'Création du transformateur XSLT  
        Dim vXslt As XslCompiledTransform = New XslCompiledTransform()
        Dim vXsltSettings As XsltSettings = New XsltSettings()
        vXsltSettings.EnableScript = True

        vXslt.Load(vXsltDocument, vXsltSettings, Nothing)

        'là où sera enregistré la transformation 
        Dim vStringBuilder As StringBuilder = New StringBuilder()

        'paramètre d'écriture du fichier transformé 
        Dim vXmlWriterSettings As XmlWriterSettings = New XmlWriterSettings()

        'paramètre un peu spécial, consultez msdn 
        vXmlWriterSettings.ConformanceLevel = ConformanceLevel.Auto

        Dim vXmlWriter As XmlWriter = XmlWriter.Create(vStringBuilder, vXslt.OutputSettings)

        vXslt.Transform(vXsltDocumentReader, Nothing, vXmlWriter, New XmlUrlResolver())

        Return vStringBuilder.ToString()

    End Function

'Feuille Xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt" xmlns:mafonction="urn:gadgaillcorporation:mafonction">
	<xsl:output method="html"/>
	<xsl:template match="root">
		<xsl:apply-templates select="name"/>
	</xsl:template>
	<xsl:template match="name">
		<xsl:value-of select="mafonction:Hello(string(.))"/><br/>
	</xsl:template>
	
	<msxml:script language="vb" implements-prefix="mafonction">
		<![CDATA[
		Public Function Hello(pName as String) as string
			return "Bonjour " & pName
		End Function
		]]>
	</msxml:script>
	
</xsl:stylesheet>

Conclusion :


PS : La source de la fonction est de poppyto (http://www.csharpfr.com/codes/TRANSFORMATION-XSLT-NET_33721.aspx).
En fait, c'est cool de faire Intégrateur ;-)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.