Visualisation du résultat d'une transformation xml/xsl

5/5 (7 avis)

Vue 30 011 fois - Téléchargée 1 077 fois

Description

Petit programme utilisant MSXML 4 pour visualiser le résultat d'une transformation XML/XSL.
Pour cela, vous charger un documet XML et un document XSL et si les deux documents sont bien formés, le résultat est produit en format texte et sur un navigateur.

Plus d'information a http://www.conceptuel.co.uk

Source / Exemple :


Voir le fichier Zip pour voir la totalité de l'application.

Vous pouvez voir ci-dessous la partie du code qui gère la transformation:

Dim xmlDoc, xslDoc As MSXML2.DOMDocument

Set xmlDoc = New MSXML2.DOMDocument
xmlDoc.async = False
xmlDoc.LoadXML XML.Text
Set MyErr = xmlDoc.parseerror
If (MyErr.errorCode <> 0) Then
  MsgBox (frmSplash.mess.List(2) & " " & MyErr.reason)
  GoTo endtransfrom
End If

Set xslDoc = New MSXML2.DOMDocument
xslDoc.LoadXML XSL.Text
xslDoc.async = False
Set MyErr = xslDoc.parseerror
If (MyErr.errorCode <> 0) Then
  MsgBox (frmSplash.mess.List(3) & " " & MyErr.reason)
  GoTo endtransfrom
Else
  OutputMethod = textchange(XSL, "<xsl:output method=")
  If Not (OutputMethod = "xml" Or OutputMethod = "html" Or OutputMethod = "text") Then
     MsgBox (OutputMethod)
     GoTo endtransfrom
  End If
End If

On Error GoTo parseerror
ParseResult.ParseResultText.Text = xmlDoc.transformNode(xslDoc)

If OutputMethod = "text" Then
   ParseResult.Show
   GoTo endtransfrom
End If

Dim path As String
Dim fso, ts

Set fso = CreateObject("Scripting.FilesystemObject")

path = "c:\temp." & OutputMethod
If Not (FileExists%(path)) Then
   fso.CreateTextFile (path)
End If

Set File = fso.GetFile(path)
Set ts = File.OpenAsTextStream(ForWriting, TristateUseDefault)
ts.Write ParseResult.ParseResultText.Text
ts.Close

ParseBrowser.WebBrowser.Navigate path

ParseResult.Show
ParseBrowser.Show

parseerror:
If xmlDoc.parseerror.errorCode <> 0 Then
   MsgBox frmSplash.mess.List(6) + xmlDoc.parseerror.errorCode
End If

endtransfrom:
End Sub

Conclusion :


xmldoc et xsldoc sont des RichTextBox qui contiennent respectivement les documents XML et XSL.

frmSplash.mess est une comboBox ou je garde les messages d'erreurs (pas esthetique, mais c'est la première version de ma gestion des messages d'erreurs).

Textchange essaye de définir la méthode de sortie du document XSL. Cela peut être html, xml ou text.

ParseResult et Parsebrowser sont les deux forms qui afficheront le résultat respectivement au format texte et navigateur.

Vous pouvez voir aussi dans le reste du code que j'ai commencé à installer la gestion multi-langue du logiciel et mettant tous les libellés de boutons et les messages dans un document XML.
Il sera ainsi possible d'ajouter des languages sans changer le code du programme.

C'est aussi pas mal de donner la liste des bugs connus.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
il est possible de saisir du texte (ou coller) dans les zones de texte XML & XSL
mais le bouton 'Transform' n'apparait que lorsque l'on charge un fichier....

là encore, suprise, tu créé un fichier temporaire, mais sur C:\ (je n'ai toujours pas de lecteur C:\ )

de plus, le WebBrowser, ne s'affiche pas si la sortie est de type text....
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
la frmSplash n'est pas déchargée.... ce qui fait que le programme ne se ferme pas correctement, la plupart du temps....
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
bug dans le Form_Load de Splash...

fichier non trouvé (il s'agit de label.xml)

ajoutes simplement app.path :

Set ts = fso.OpenTextFile(App.path & "\label.xml", ForReading, False)
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
ton application scande que je ne possède pas XML4.0 sur ma machine......

après examen du code, je m'apercois avec effroi que tu fais un test d'existence de la dll dans des chemins en dur !!

path = "c:\winnt\system32\msxml4.dll"

.... Windows est chez moi installé sur le lecteur H: (c'est mon droit...)

j'aprecie que tu fasse un test, c'est plus propre qu'un crash
plutot que de tester la disponibilité de la Dll, teste si tu peux créer un object MSXML....
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
un affichage en temps reel du resultat serait un plus

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.