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 habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut [MSXML3][VBA] Attribut xmlns de la balise racine
    Bonjour à tous,
    Je dois générer des fichiers XML à partir d'une applicatiopn Access en VbA
    Je suis parti sur la base de la syntaxe du tutoriel de Arkam.
    (avec des With ……. End With)
    http://arkham46.developpez.com/artic...b/?page=page_4

    Je dois créer un attribut au niveau de la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Document>
    xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"
    en utilisant la syntaxe suivante :
    Code vba : 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
    With oXML.appendChild(oXML.createElement("Document"))
     
    ' ces 3 lignes créent 2 Attributs (rouges)
       Set docAttrib = oXML.createAttribute("xmlns")
       docAttrib.Text = "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"
       .Attributes.setNamedItem docAttrib
     
         With .appendChild(oXML.createElement("CstmrDrctDbtInitn"))
           With .appendChild(oXML.createElement("GrpHdr"))
               With .appendChild(oXML.createElement("MsgId"))
                   .Text = Left(TxtAcronyme & " " & DATEHEURE, 35)
               End With
               With .appendChild(oXML.createElement("CreDtTm"))
                   .Text = DATEHEURE
               End With
                With .appendChild(oXML.createElement("NbOfTxs"))
                   .Text = TxtNbOfTxs
               End With
                With .appendChild(oXML.createElement("CtrlSum"))
                   .Text = TxtCtrlSum
               End With
                With .appendChild(oXML.createElement("InitgPty"))
                    With .appendChild(oXML.createElement("Nm"))
                    .Text = Left(TxtNomSociete, 70)
                    End With
               End With
           End With
    End With
    Cela provoque la création de l’attribut au niveau de la balise <Document> (ce qui est souhaité)
    Et également, après au niveau de la balise "Child" suivante
    (ce qui n’est pas souhaité)

    Comment Faire ?.
    J’ai trouvé ce lien sur le forum, mais je n’arrive pas à mettre en œuvre la syntaxe
    http://www.developpez.net/forums/d76...balise-racine/

    Je maîtrise mal la syntaxe XML
    Merci de votre aide.

    Cordialement
    FEVEC

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Ce que vous faites, c'est on peut dire valable. Mais une namespace déclaration n'est proprement pas un attribut au sens ordinaire. Mieux est de faire en remplaçant CreateElement("Document") par CreateNode() la façon montrée ci-dessous, et les lignes createAttribute() etc etc ne sont plus nécessaires.

    Et puis, l'apparition d'un 'attribut' xmlns="" dans la balise CstmrDrctDbtInitn est bien nécessaire pour déjouer la déclaration héritable.

    Dans le cas où il y a à la fois des éléments qui vivent dans des namespaces et des éléments qui ne vivent en aucun, il vaut mieux s'employer la notion de préfixe, comme "ns" ci-dessous.
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'IXMLDOMNodeType enumeration, NODE_ELEMENT (1) 
    With oXML.appendChild(oXML.createNode(1,"ns:Document", "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"))
     
        'enlever des lignes ici qui ne sont pas nécessaires
     
        With .appendChild(oXML.createElement("CstmrDrctDbtInitn"))
            'etc etc
        End With
     
    End With

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    Merci de votre réponse rapide.
    Je reviens vers vous avec mes questions naïves
    Avec le code
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    With oXML.appendChild(oXML.createNode(1,"ns:Document", "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"))
    j'obtient une balise
    <ns: Document>
    J'ai vraiment besoin d'une balise <Document>

    avec le code
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    With oXML.appendChild(oXML.createNode(1, "Document", "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"))

    j'obtient 2 "xmlns" un sous <Docupent>
    et un sous la balise suivante <CstmrDrctDbtInitn>

    J'ai donc des "ErrorList" dans XML Notepad

    J'utilise ensuite XML Notepad pour voir le fichier XML et voir sa "conformité" au schéma pain.008.001.02.xsd (cf. miniature jointe du résutat attentu)

    Du coup, j'ai un peu de mal à savoir ce que je dois faire....

    Merci pour votre aide

    Cordialement,
    fevec
    Images attachées Images attachées  

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par fevec Voir le message
    avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With oXML.appendChild(oXML.createNode(1, "Document", "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"))
    j'obtient 2 "xmlns" un sous <Docupent>
    et un sous la balise suivante <CstmrDrctDbtInitn>
    Il faut créer tous les éléments de cette manière-là, pas seulement le premier.

    Ce "xmlns" est ce qu'on appelle une déclaration de namespace, et en mettre un seul à la racine signifie que tous les éléments du document sont dans ce namespace.

    Lorsqu'on les crée par programmation, on doit donc indiquer à tous les éléments qu'ils sont dans ce namespace, car sinon, c'est qu'ils n'y sont pas, ce qui est contradictoire avec le xmlns tout seul dans la racine. Dans ce cas, il y aura donc un nouveau xmlns pour les éléments qui sortent du namespace déclaré dans la racine.
    Pour ne pas que ça arrive, il suffit que tous les éléments aient le même namespace, donc de tous les créer avec le même namespace.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    Grand Merci thelvin,
    J'ai ré écrit tout le code VBA avec des
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    With oXML.appendChild(oXML.createNode(1, "nom_dela_balise", "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"))
    et c'est parfait.

    bonne journée
    Résolu

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Euuurrrm, je suis à peu près sûr que VBA connaît le concept de "variables". Et de "fonctions" aussi, d'ailleurs.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/12/2010, 16h49
  2. [MSXML3][VBA] Attribut xmlns de la balise racine
    Par Rank dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 08/12/2005, 18h50
  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