Dotnet 2.0 transformation xslt d'un fichier xml (vb.net)

0/5 (4 avis)

Snippet vu 23 214 fois - Téléchargée 32 fois

Contenu du snippet

Bonjour,

J'en avais plein le dos du message "Xsl.XslTransform est obsolète " dans mon Visual Studio 2005 lors de mes transformations XSLT.
J'ai trouvé la solution en C# (merci poppyto).
Je l'ai donc codé en VB.NET avec une petite modification afin de retourner en résultat soit un document XML, soit un string selon la transformation effectuée, histoire de fabriquer du RTF ou un autre format non XML.

Source / Exemple :


''' <summary> 
''' Transformation XSLT d'un fichier XML 
''' </summary> 
''' <param name="reader">Le document XML a transformer</param> 
''' <param name="XSL_Filename">L'URI serveur du fichier xslt de transformation</param> 
''' <param name="Retour">type d'objet renvoyé par la fonction - Valeur : XML,TEXT</param> 
Public Function GetTransformXSLTFile(ByVal reader As XmlDocument, ByVal XSL_Filename As String, Optional ByVal Retour As String = "XML") As Object 
'On charge le fichier XSL dans un XmlDocument 
Dim XSLTDocument As XmlDocument = New XmlDocument() 
XSLTDocument.Load(XSL_Filename) 

'Création du lecteur XML 
Dim XSLTDocumentReader As XmlNodeReader = New XmlNodeReader(reader) 

'Création du transformateur XSLT 
Dim xslt As XslCompiledTransform = New XslCompiledTransform() 
xslt.Load(XSLTDocument, Nothing, Nothing) 

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

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

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

'xslt.OutputSettings correspond aux paramètres <xsl:output> dans votre fichier XSL 
'veillez à bien spécifier la sortie en html <xsl:output method="html" /> autrement 
'c'est "xml" par défaut et les balises vides (exemple <div></div>) seront transformées 
'en (</div>) 
Dim htmlDoc As XmlWriter = XmlWriter.Create(TransformOutput, xslt.OutputSettings) 
xslt.Transform(XSLTDocumentReader, Nothing, htmlDoc, New XmlUrlResolver()) 

If Retour = "XML" Then 
'On charge le fichier XMLstring dans un XmlDocument 
Dim XmlDoc As XmlDocument = New XmlDocument() 
XmlDoc.InnerXml = TransformOutput.ToString() 
Return XmlDoc 
Else 
Return TransformOutput.ToString() 
End If 

End Function

Conclusion :


La version original c# de poppyto sur http://www.csharpfr.com/codes/TRANSFORMATION-XSLT-NET_33721.aspx.
Chez moi : http://www.saizonou.info

A voir également

Ajouter un commentaire Commentaires
robcio35 Messages postés 1 Date d'inscription samedi 30 septembre 2006 Statut Membre Dernière intervention 28 mars 2007
28 mars 2007 à 14:45
Merci pour cette fonction très utile. Malheureusement elle ne fonctionne pas lorsque le XSL contient des references vers d'autres XSL. Exemple : <xsl:import href="screen_0.xsl"/>. Lorsque cette ligne de code se trouve dans le XSL, alors j'obtiens l'erreur : "System.Xml.Xsl.XslLoadException: XSLT compile error. An error occurred at (0,0). ---> System.Xml.XmlException: Resolving of external URIs was prohibited.". Comme je suis nouveau en ASP.NET 2.0 (mais déjà experimenté en ASP.NET 1.1), j'apprécierais un coup de main.
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
30 mai 2006 à 10:59
>> Pierrot123

Imports System.Xml
Imports System.Xml.XPath
Imports System.Xml.Xsl
cs_pierrot123 Messages postés 1 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 30 mai 2006
30 mai 2006 à 10:54
slt, j'aimerai bien utiliser ta fonction mais Visual Studio 2005 ne reconnait pas les types :

XslCompiledTransform
ConformanceLevel
XmlWriterSettings

De plus, il me dit que "create" n'est pas un membre de la classe XmlWriter.

Voila merci d'avance pour t réponses
cho
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
18 avril 2006 à 14:07
De rien ;o)

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.