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 :

Attributs d'une racine


Sujet :

XML/XSL et SOAP

  1. #1
    Candidat au Club
    Attributs d'une racine
    Bonjour à vous,

    Je suis actuellement en train de reproduire un document XML avec du VBA et à partir d'un tableau Excel (que si j'enregistre en XML, il n'est pas structuré correctement). J'ai déjà réalisé la première ligne du fichier XML :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="utf-8"?>


    Ainsi que quelques balises grâce à ce code ...

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Private Sub CommandButton1_Click()
     
    Dim Doc_XML As Object   'permet de créer le XML
    Dim Node As Object      'permet de créer les noeuds
    Dim Root As Object      'permet de créer la racine du XML
    Dim Chemin As String    'Chemin de sauvegarde
     
    Set Doc_XML = CreateObject("MSXML2.DOMDocument")    'Création du XML
     
    Set Node = Doc_XML.createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""")
     
    Doc_XML.appendChild Node                            'Ajout des données au fichier
    Set Node = Nothing                                  'Remise à zéro du noeud
    Set Root = Doc_XML.CreateElement("SWOOMat")         'Création d'une racine
    Doc_XML.appendChild Root                            'Ajout de la racine au XML
    Root.appendChild Doc_XML.createTextNode(vbCrLf)
     
    Set Node = Doc_XML.CreateElement("Materials")       'Création d'un noeud
    Root.appendChild Node                               'Ajout du noeud à la racine
    'Node.Text = "Text 1"                                'Ajout d'un texte dans le noeud                                  'Remise à zéro du noeud
    Root.appendChild Doc_XML.createTextNode(vbCrLf)
     
    Set Node = Doc_XML.CreateElement("EdgeBands")       'Création d'un noeud
    Root.appendChild Node                               'Ajout du noeud à la racine
    'Node.Text = "Text 1"                                'Ajout d'un texte dans le noeud
    Set Node = Nothing                                  'Remise à zéro du noeud
    Root.appendChild Doc_XML.createTextNode(vbCrLf)
     
    Set Node = Doc_XML.CreateElement("EdgeBandsShapes") 'Création d'un noeud
    Root.appendChild Node                               'Ajout du noeud à la racine
    Node.Text = "Text 1"                                'Ajout d'un texte dans le noeud
    Set Node = Nothing                                  'Remise à zéro du noeud
    Root.appendChild Doc_XML.createTextNode(vbCrLf)
     
    Set Node = Doc_XML.CreateElement("EdgeBandsEndShapes") 'Création d'un noeud
    Root.appendChild Node                               'Ajout du noeud à la racine
    Node.Text = "Text 1"                                'Ajout d'un texte dans le noeud
    Set Node = Nothing                                  'Remise à zéro du noeud
    Root.appendChild Doc_XML.createTextNode(vbCrLf)
     
    Set Node = Doc_XML.CreateElement("Boards")         'Création d'un noeud
    Root.appendChild Node                               'Ajout du noeud à la racine
    Node.Text = "Text 1"                                'Ajout d'un texte dans le noeud
    Set Node = Nothing                                  'Remise à zéro du noeud
    Root.appendChild Doc_XML.createTextNode(vbCrLf)
     
    'Ajout de la partie attribut si tu le souhaite
     
    'Set Name = Doc_XML.CreateAttribute("Attrib")        'Création de l'attribut
    'Name.NodeValue = "Ce que tu veux"                   'Nommnation de l'attribut
    'Node.SetAttributeNode Name                          'Ajout de l'attribut au noeud
     
    If TextBox1 = "" Then
    MsgBox "Renseignez le nom que vous souhaitez attribuer au fichier"
    Else
    Chemin = ThisWorkbook.Path & "\" & TextBox1.Text & ".xml"  'Chemin de sauvegarde + Nom du fichier
    Doc_XML.Save Chemin                                 'Sauvegarde
    TextBox1 = ""
    End If
     
    End sub


    Ce que je n'arrive pas à faire premièrement c'est de mettre des attributs à la racine, la racine devant ressembler à ceci :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <SWOODMat xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sd="http://www.w3.org/2001/XMLSchema" xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="http://www.w3.org/2001/XMLSchema-instance" Version="1" xmlns="http://www.eficad.com//SWOODMat">


    Si quelqu'un peut m'aider à intégrer du code dans ce que j'ai fait pour la faire apparaître dans mon doc XML.

    Merci et bonne journée

  2. #2
    Membre émérite
    Pour ajouter xmlnssd, xmlnssi et Version, c'est très simple. Pour la déclaration xmlns="...", c'est plus compliqué parce qu'il s'agit une concept centrale (le namespace par défaut et sa propagation héritagère) et une réalization qui ont des impacts tout au long du code ...

    Voice une réécriture pour la partie débutée du code qui montre les essentiels ce qu'on doit faire ...
    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
    29
    30
    31
    32
    'etc etc inchangés
     
    Const NODE_ELEMENT As Integer = 1
    Dim nsDefaultUrn As String = "http://www.eficad.com//SWOODMat"
     
    Set Doc_XML = CreateObject("MSXML2.DOMDocument")
     
    Set Node = Doc_XML.createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""")
     
    Doc_XML.appendChild Node
    Set Node = Nothing
     
    'Set Root = Doc_XML.CreateElement("SWOOMat")
    Set Root=Doc_XML.CreateNode(NODE_ELEMENT, "SWOOMat", nsDefaultUrn)    'Important pour coder le namespace par défaut
     
    Root.setAttribute "xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sd", "http://www.w3.org/2001/XMLSchema"
    Root.setAttribute "xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si", "http://www.w3.org/2001/XMLSchema-instance"
    Root.setAttribute "Version", "1"
     
    Doc_XML.appendChild Root
    Root.appendChild Doc_XML.createTextNode(vbCrLf)
     
    'Set Node = Doc_XML.CreateElement("Materials")
    Set Node = Doc_XML.CreateNode(NODE_ELEMENT, "Materials", nsDefaultUrn)    'Important pour le héritage du namespace
     
    Root.appendChild Node
    'Node.Text = "Text 1"
    Root.appendChild Doc_XML.createTextNode(vbCrLf)
     
    'Faire le même remplacer  toutes les CreateElement() dans le reste par CreateNode() de la même façon comme pour Materials...
     
    'etc ...

  3. #3
    Candidat au Club
    Bonjour,

    Merci pour votre aide, c'est très complet j'aurai du vous mettre une capture d'écran ça aurait été plus simple car le xmlns ne se répertorie pas partout je peux donc laisser le create element et cela fonctionne bien.

    Merci

    Bonne journée

###raw>template_hook.ano_emploi###