IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Modifier un fichier XML


Sujet :

VBScript

  1. #1
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 58
    Points
    58
    Par défaut Modifier un fichier XML
    Bonjour,

    Je débute en VBScript et surtout en manipulation de fichier XML.
    J'ai lu et essayé d'appliquer les exemples de la FAQ sans parvenir à mes fins.

    Je vous expose donc mon problème.

    Un de nos logiciels stocke la configuration utilisateur dans un fichier config.XML ayant la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Root>
    	<Attributes MarkColor="255" DwgAutoCopy="1" DwgOutVersion="2004"/>
    	<Directories/>
    </Root>
    La section "Attributes" stocke les paramètres qui diffèrent de la configuration de base du logiciel.
    Les différents paramètres n'y sont donc présents que s'ils dérogent à la config par défaut.
    Mon but est de forcer par programmation la valeur de certains paramètres tout en laissant l'utilisateur libre de fixer les autres à sa guise.

    Par exemple je veux m'assurer que DwgAutocopy="1"

    Je suppose donc que je dois :
    - tester la présence de ce paramètre et le créer si nécessaire?
    - tester sa valeur et la modifier?

    D'avance merci de me donner des éléments de réponse si possible avec un exemple concret.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par Phileo Voir le message
    ...
    J'ai lu et essayé d'appliquer les exemples de la FAQ sans parvenir à mes fins.
    ....
    montre ton code ... en t'inspirant de :




    Comment accéder aux attributs d'une balise ?

  3. #3
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 58
    Points
    58
    Par défaut
    Merci bbil pour ta réponse rapide.

    Voici donc mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    '-- 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:\Documents and Settings\pbr\Mes documents\Plancal\Nova50\Settings\config.xml")
     
     
    For Each oElement In xmlDoc.getElementsByTagName("Attributes")
     
     
    	  If oElement.getAttribute("DwgAutoCopy") = "1" then
    			msgbox "ok"
    	  else
    		oElement.setAttribute "DwgAutoCopy","1"
    		msgbox "Attribut changé"
    	   end if
    Next
     
    Set xmlDoc = Nothing

    Si DwgAutoCopy a pour valeur 1 le message "ok" s'affiche comme prévu

    Si DWGAutocopy a une autre valeur ou n'existe pas le message "Attribut changé" s'affiche comme prévu mais
    - la valeur de l'Attribut n'est pas changé s'il existe
    - il n'est pas créé si inexistant

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Il manque la sauvegarde de l'XML en mémoire vers le disque..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlDoc.Save("C:\Documents and Settings\pbr\Mes documents\Plancal\Nova50\Settings\config.xml")

  5. #5
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 58
    Points
    58
    Par défaut
    Merci bbil

    Je venais d'arriver à cette conclusion tout seul.
    J'imaginais tant de problèmes possibles que je n'avais pas vu l'évidence !!!!

    Par contre j'ai maintenant une autre question qui me laisse perplexe.

    Le code ci-dessous modifie la valeur de DwgAutocopy si nécessaire et le créé s'il n'existe pas. Par contre je n'ai que faire que la condition si vrai pour laquelle je n'ai pas d'action à faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If  oElement.getAttribute("DwgAutoCopy") = "1" then	msgbox "ok" else oElement.setAttribute "DwgAutoCopy","1"
    J'ai donc tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If  oElement.getAttribute("DwgAutoCopy") <> "1" then	oElement.setAttribute "DwgAutoCopy","1"
    Selon mes tests :
    - ça permet de changer la valeur de DwgAutocopy s'il existe
    - mais ça ne le crée pas s'il n'existe pas

    Pourquoi ?

  6. #6
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 58
    Points
    58
    Par défaut
    J'ai poursuivi mes tests.

    J'arrive au résultat voulu en simplifiant le code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each oElement In xmlDoc.getElementsByTagName("Attributes")
     
     
          oElement.setAttribute "DwgAutoCopy","1"         ' configure l'enregistrement automatique en DWG : 1 = activé
          oElement.setAttribute "DwgOutVersion","2004"    '  format de l'enregistrement automatique DWG : ici Autocad 2004
     
    Next
    La valeur de l'attribut sera modifié s'il existe, il sera créé à la bonne valeur s'il n'est pas présent.

    mon problème de base est donc résolu de manière satisfaisante.

    Mais si quelqu'un peut me dire pourquoi la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If  oElement.getAttribute("DwgAutoCopy") <> "1" then	oElement.setAttribute "DwgAutoCopy","1"
    donne un résultat différent des deux autres, je suis toujours vivement intéressé par la réponse.

    Est-ce
    - une erreur bête dans mon code ?
    - un bug ?
    - le fait que "<>" n'existe pas en VBS ?....

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    salut,

    à tester mais peu-être que le fait de tenter l'accès à un attribut qui n'existe pas provoque une erreur qui rend ton équation fausse...

    essai de faire cela en 2 passe du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    iDwgAutoCopy = oElement.getAttribute("DwgAutoCopy") 
    'Affiche résultat pour test :
    MsgBox iDwgAutoCopy
    if iDwgAutoCopy <> "1"  Then ...

  8. #8
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 58
    Points
    58
    Par défaut
    bbil
    j'ai testé ta proposition.

    Le code proposé génère bien une erreur à l'instruction "msgbox iDwgAutoCopy""

    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if DwgAutoCopy <> "1"  Then oElement.setAttribute "DwgAutoCopy","1"
    fonctionne bien.

    il semble donc que le problème soit au niveau de getAttribute ?

    Dans le cas présent la conclusion est qu'il faut aller au plus simple et indiquer les valeurs que l'on souhaite configurer.
    Le système gère bien l'absence éventuelle du paramètre en le créant à la volée.

    merci bbil pour ton aide
    Si quelqu'un passe par là et qu'il a "la réponse" à cette intéressante question ce sera avec intérêt.
    Sinon inutile d'y passer trop de temps.

  9. #9
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 58
    Points
    58
    Par défaut
    Le sujet principal ayant été traité je passe en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM4J] Modifier un Fichier XML
    Par vain_mich dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/06/2007, 16h00
  2. [Web] modifier un fichier xml via HTML
    Par cyberfilou dans le forum APIs
    Réponses: 2
    Dernier message: 04/05/2007, 11h12
  3. [XML-XSLT]Modifier un fichier XML grâce à un formulaire
    Par Maurice Fallou dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2007, 16h57
  4. [VB NET]: Modifier un fichier XML via un DataSet
    Par ADONET dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/02/2006, 18h54
  5. [DOM] [Débutant(e)] Modifier un fichier XML avec DOM
    Par macks dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 05/07/2005, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo