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

XML/XSL et SOAP Discussion :

[MSXML3][VBA] Attribut xmlns de la balise racine


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Août 2003
    Messages : 20
    Points : 21
    Points
    21
    Par défaut [MSXML3][VBA] Attribut xmlns de la balise racine
    Bonjour à tous!!!
    J'ai un rapport Excel à exporter sous format XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" ?> 
    <Certificat>
      <observation>
        <numero>352001</numero> 
      </observation>
    </Certificat>
    À la balise Certificat, je doit ajouter l'attribut xmlns="AnalyseLabo.xsd"

    Mais l'attribut en question s'insère AUSSI à la balise observation, mais sans sa veleur ("AnalyseLabo.xsd") alors que si je nome l'attribut test plutôt que xmlns, l'attribut ne s'insère QUE dans la balise Certificat, comme je le voulais au départ...

    Voicile code VBA que j'utilise:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub subCreerXML()
        Dim xmlDoc As New DOMDocument30
        Dim rootElement As IXMLDOMElement
        Dim docElement As IXMLDOMElement
        Dim elementObserv As IXMLDOMElement
        Dim docAttrib As IXMLDOMAttribute
        Dim pi As IXMLDOMProcessingInstruction
     
        xmlDoc.async = False
        xmlDoc.validateOnParse = False
        xmlDoc.resolveExternals = False
     
        ' Création du noeud racine
        Set rootElement = xmlDoc.createElement("Certificat")
     
        ' Création d'un attribut dans la racine : xmlns avec le nom de fichier xsd
        Set docAttrib = xmlDoc.createAttribute("xmlns")
        docAttrib.Text = "AnalyseLabo.xsd"
        rootElement.Attributes.setNamedItem docAttrib
     
        ' Ajouter le noeud racine au document 
        xmlDoc.appendChild rootElement
     
        'Sélectionner la première ligne et boucler jusqu'à la dernière
        Range("A1").Select
        ' Créer l'observation
        Set docElement = xmlDoc.createElement("observation")
     
        'Insérer le numéro
        Set elementObserv = xmlDoc.createElement("numero")
        elementObserv.Text = ActiveCell.Value
        docElement.appendChild elementObserv
        [...]
        'Ajouter la ligne au document 
        rootElement.appendChild docElement
     
        'Fermer les balises
        Set pi = xmlDoc.createProcessingInstruction("xml", "version='1.0'")
        xmlDoc.insertBefore pi, xmlDoc.childNodes.Item(0)
     
        ' Sauvegarde
        xmlDoc.Save "Certificat.xml"
     
    End Sub
    Et le résultat obtenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" ?> 
    <Certificat xmlns="AnalyseLabo.xsd">
      <observation xmlns="">
        <numero>352001</numero> 
      </observation>
    </Certificat>
    alors que le résultat voulu serais celui-cis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" ?> 
    <Certificat xmlns="AnalyseLabo.xsd">
      <observation>
        <numero>352001</numero> 
      </observation>
    </Certificat>
    Pourquoi donc MSXML place l'attribut xmlns partout alors que si je nomme l'attribut test, il n'yra que dans la racine?

    Merci de votre aide éventuelle...

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonsoir,

    xmlns="AnalyseLabo.xsd" n'est pas un attribut comme les autres, il sert à désigner un espace de nom par défaut. Cela signifie que l'élément à qui il appartient (<Certificat>), ainsi que tous ses descendants (<observation> et <numero>) appartiennent au même espace de nom (AnalyseLabo.xsd).

    En placant l'attribut xmlns comme tu l'as fais, en le désignant comme attribut de <Certificat>, MSXML a compris (on l'excusera) que seul <Certificat> devait appartenir à cet espace de nom, et que ses éléments descendants ne devaient pas y appartenir ; donc , pour annuler l'effet du xmlns="AnalyseLabo.xsd", il a placé xmlns="" sur son fils direct <observation>.

    La bonne méthode pour créer les 3 éléments et indiquer qu'ils appartiennent tous au même espace de nom AnalyseLabo.xsd, est de remplacer tous les createElement(nomtag) par la méthode createNode(type, nomtag, espacenom) qui permet d'indiquer à quel espace de nom appartient le noeud créé. Ce qui donne, par exemple pour rootElement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set rootElement = xmlDoc.createNode(IXMLDOMNodeType.NODE_ELEMENT, "Certificat", "AnalyseLabo.xsd")

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Août 2003
    Messages : 20
    Points : 21
    Points
    21
    Par défaut
    Merci Grand-Père!

    héhé!!

    Ça fonctionne effectivement très bien de cette façon!!

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

Discussions similaires

  1. [MSXML3][VBA] Attribut xmlns de la balise racine
    Par fevec dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 29/01/2014, 09h47
  2. Réponses: 0
    Dernier message: 08/12/2010, 16h49
  3. [HTML][Firefox] Attribut maxlenght dans une balise Text
    Par charlot44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/07/2005, 09h34
  4. [XHTML][w3c] attribut border de la balise <img>
    Par Sinclair dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/01/2005, 13h35
  5. Réponses: 4
    Dernier message: 18/11/2003, 16h08

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