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é :
En svg, la balise <g> correspond aux calques/sous-calques visibles sur un logiciel de dessin vectoriel tel qu'Illustrator.
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>
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 :
Mais comment garder les identifiants des <g> dans lesquels sont placés les balises <path>, <polyline> ou autres ?
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
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
Partager