Bonjour,
J'ai essayé de rendre le titre compréhensible mais c'est pas gagné
Ma macro ouvre des fichiers de dessin au format .svg qui est un format xml. Pas de soucis pour utiliser la bibliothèque IXMLDOM.
Mon problème c'est de gérer les imbrications de balise <g>. Je vous donne un exemple simplifié :
Code XML : 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
<svg
width="4000" height="6000" version="1.1" >
<title>Le joli plan du siège mondial de developpez.net</title>
 
<g id="zone 1" >
  <g id="sous_groupe 1">
        <path id="fosse" d="M 714.274,3026.228Q721.6679,3021.7303 724.3654,3017.3556C726.5549,3013.8046 725.6282,3010.788 726.4913,3006.4139C727.295,3002.3408z" style=" fill:None; stroke:#000" />
 	<polyline  id="mur M12" fill="none" stroke="#000000"  stroke-width="0.1" points="1810.772,2218.874 1810.772,2228.874 1810.772,2223.874       1805.772,2223.874 1815.772,2223.874     " />
 
  </g>  
  <g id="sous_groupe 2"> 
        <path  id="mur M13" d="M 714.274,3026.228Q721.6679,3021.7303 724.3654,3017.3556C726.5549,3013.8046 725.6282,3010.788 726.4913,3006.4139C727.295,3002.3408z" style=" fill:None; stroke:#000" />
 	<polyline  id="mur M14" fill="none" stroke="#000000"  stroke-width="0.1" points="1810.772,2218.874 1810.772,2228.874 1810.772,2223.874       1805.772,2223.874 1815.772,2223.874     " />
        <g>
                <polygon  id="mur M15" fill="none" stroke="#000000"  stroke-width="0.1" points="1810.772,2218.874 1810.772,2228.874 1810.772,2223.874     " />
        </g>
  </g> 
</g>
  <g id="autre zone"> 
    <path d="M 691.0583,2905.4721C692.6233,2908.3657 697.6717,2908.9186  691.0583,2905.4721z" style=" fill:None;stroke-width:0.1; stroke:#000" />
  </g>  
 
</svg>
En svg, la balise <g> correspond aux calques/sous-calques visibles sur un logiciel de dessin vectoriel tel qu'Illustrator.
Il y a donc des <g> dans des <g> un nombre indéterminé de fois.
Je voudrais récupérer les identifiants de ces balises <g> et les saisir en BDD .
Je précise que les <g> n'ont pas forcément d'identifiant unique. Donc pas possible de se reposer là-dessus

A la base, facile, il suffit de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Dim xNode As IXMLDOMNode, nitem As IXMLDOMAttribute, identifiant as string
For Each nitem In xNode.Attributes
         If nitem.Name = "id" Then
               dentifiant = nitem.Value
         End If
Next
Mais comment garder les identifiants des <g> dans lesquels sont placés les balises <path>, <polyline> ou autres ?
En clair, en suivant l'exemple plus haut, je voudrais par exemple avoir comme info : le <path> id = "fosse" appartient à zone1 / sous-groupe1
Ce qui implique de savoir où je suis dans l'arborescence et ne pas mélanger les <g> "frères"
Si vous avez une solution, je suis preneur. Si j'ai pas été clair, j'en suis désolé, dites-le moi et je tâcherai de ré-expliquer.
Merci d'avance