FAQ VBScriptConsultez toutes les FAQ
Nombre d'auteurs : 16, nombre de questions : 108, dernière mise à jour : 2 mars 2019 Ajouter une question
Cette FAQ VB Script est le fruit de la collaboration de l'équipe de rédaction et des membres du forum VB.
Aidez-nous à faire vivre cette FAQ en participant au forum Vos contributions VBScript.
Pour toutes questions ou tous problèmes concernant cette FAQ, vous pouvez contacter par MP ThierryAIM ou bbil.
L'équipe de rédaction de Developpez.com vous remercie pour votre participation passée et à venir.
- Comment créer un nouveau document XML ?
- Comment ouvrir un document XML existant ?
- Comment ajouter un attribut à une balise XML ?
- Comment accéder aux valeurs d'un noeud par le nom de balise ?
- Comment accéder aux attributs d'une balise ?
- Comment valider un XML via un XSD en VB avec MSXML et sans .Net sous Windows ?
Le code ci-dessous utilise la classe Microsoft.XMLDOM, permettant d'accéder aux documents de type XML :
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | '-- Créer un document XML Set xmlDoc = CreateObject("Microsoft.XMLDOM") ' Créer et ajouter la racine dans le document ' ATTENTION : il ne peut y avoir qu'un seul noeud racine dans un doc XML Set oRacine = xmlDoc.createElement("Racine") ' Ajouter la racine dans le document xmlDoc.appendChild oRacine ' Ajouter un élément Set oElement = xmlDoc.selectSingleNode("Racine") ' positionnement sur la racine Set oElement = xmlDoc.createElement("element") ' création d'un fils membre xmlDoc.documentElement.appendChild oElement ' crée le fils de la racine ' Ajouter des champs balises Set oNom = xmlDoc.createElement("nom") oNom.Text = "LENOM" oElement.appendChild oNom Set oNom = Nothing Set oPrenom = xmlDoc.createElement("prenom") oPrenom.Text = "Prénom" oElement.appendChild oPrenom Set oPrenom = Nothing Set oElement = Nothing '-- Indenter le fichier créé set rdr = CreateObject("MSXML2.SAXXMLReader") set wrt = CreateObject("MSXML2.MXXMLWriter") Set oStream = CreateObject("ADODB.STREAM") oStream.Open 'Ouverture objet stream.. oStream.Charset = "ISO-8859-1" wrt.indent = True wrt.encoding = "ISO-8859-1" wrt.output = oStream ' "Connexion" de l'objet Writer à l'objet Stream Set rdr.contentHandler = wrt Set rdr.errorHandler = wrt rdr.Parse xmlDoc wrt.flush ' Sauver le fichier créé oStream.SaveToFile "test1.xml", 2 ' Détruire les objets Set rdr = Nothing Set wrt = Nothing Set xmlDoc = Nothing |
Résultat :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 | <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> <Racine Create="03/03/2007"> <element> <nom>LENOM</nom> <prenom>Prénom</prenom> </element> </Racine> |
Le code ci-dessous utilise la classe Microsoft.XMLDOM, permettant d'accéder aux documents de type XML :
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | '-- Lire un document XML Set xmlDoc=CreateObject("Microsoft.XMLDOM") 'La desactivation du mode asynchrone permet de charger entièrement le document en mémoire avant le traitement xmlDoc.Async="false" 'Charger le document en mémoire xmlDoc.Load("c:\test1.xml") For each x in xmlDoc.documentElement.childNodes Msgbox x.nodename & " : " & x.text Next Set xmlDoc = Nothing |
La méthode SetAttribute de l'objet Element permet de spécifier un attribut pour une balise XML.
Un attribut se compose de deux paramètres :
- un identificateur
- la valeur de l'attribut
Reprenons l'exemple précédent et ajoutons un attribut Date au nœud racine et un attribut ID pour le nœud element :
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | '-- Créer un doc XML Set xmlDoc = CreateObject("Microsoft.XMLDOM") Set oCreation = xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='ISO-8859-1'") xmlDoc.insertBefore oCreation, xmlDoc.childNodes.Item(0) ' Créer et ajouter la racine dans le document ' ATTENTION : il ne peut y avoir qu'un seul noeud racine dans un doc XML Set oRacine = xmlDoc.createElement("Racine") ' Ajouter un attribut Date de création du document oRacine.setAttribute "Créé_le", FormatDateTime(Date, vbGeneralDate) ' Ajouter la racine dans le document xmlDoc.appendChild oRacine ' Ajouter un élément Set oElement = xmlDoc.selectSingleNode("Racine") ' positionnement sur la racine Set oElement = xmlDoc.createElement("element") ' création d'un fils membre ' Ajouter un attribut ID à l'élément créé oElement.setAttribute "ID", "1" xmlDoc.documentElement.appendChild oElement ' crée le fils de la racine ' Ajouter des champs balises Set oNom = xmlDoc.createElement("nom") oNom.Text = "LENOM" oElement.appendChild oNom Set oNom = Nothing Set oPrenom = xmlDoc.createElement("prenom") oPrenom.Text = "Prénom" oElement.appendChild oPrenom Set oPrenom = Nothing Set oElement = Nothing ' Sauver le fichier créé xmlDoc.save ("test1.xml") Set xmlDoc = Nothing |
Résultat :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="ISO-8859-1"?> <Racine Créé_le="19/02/2007"> <element ID="1"> <nom>LENOM</nom> <prenom>Prénom</prenom> </element> </Racine> |
C'est bien gentil de créer un document XML, encore faut-il pouvoir accéder à son contenu et en retirer les informations qui nous intéressent :
Sur la base de l'exemple précédent, comment récupérer les valeurs de la balise nom en utilisant la méthode getElementsByTagName :
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | '-- Lire un doc XML Set xmlDoc=CreateObject("Microsoft.XMLDOM") xmlDoc.async="false" ' permet de charger entièrement le document en mémoire avant le traitement xmlDoc.load("test1.xml") ' Lister les valeurs par nom de balise Set oElement = xmlDoc.documentElement If Not oElement Is Nothing Then For Each x In oElement.getElementsByTagName("nom") MsgBox x.Text Next End If |
La méthode GetAttribute de l'objet Element permet d'accéder aux attributs d'une balise noeud :
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | '-- Lire un doc XML Set xmlDoc = CreateObject("Microsoft.XMLDOM") xmlDoc.async = "false" xmlDoc.load("test1.xml") ' Pour tous les noeuds "element", renvoie l'attribut "ID" ' Attention à la casse ! For Each oElement In xmlDoc.getElementsByTagName("element") MsgBox oElement.getAttribute("ID") Next |
L'aide en ligne accompagnant XML Parser SDK donne des exemples dans plusieurs langages, ci-dessous un squelette en VBScript.
Remplacer les expressions entre accolades par les valeurs réelles ou des paramètres (ex.: {namespace}) :
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Dim WshShell Set WshShell=CreateObject("WScript.Shell") Dim xmlDoc set xmlDoc=CreateObject("Msxml2.DOMDocument.6.0") xmlDoc.async=false xmlDoc.validateOnParse=true Dim xmlSchema set xmlSchema=CreateObject("Msxml2.DOMDocument.6.0") xmlSchema.async=false xmlSchema.validateOnParse=true xmlSchema.load {le chemin d acces au schema} Dim xsdCache set xsdCache=CreateObject("Msxml2.XMLSchemaCache.6.0") xsdCache.add {namespace}, xmlSchema Set xmlDoc.schemas = xsdCache xmlDoc.load {le chemin d acces au fichier XML} Set myErr=xmlDoc.parseError If(myErr.errorCode<>0)Then WScript.Echo("errorReason="+myErr.reason) else WScript.Echo("ok") End If |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.