"Parser" un fichier SVG
Rocou
Membre
Bonjour,
Je cherche à manipuler un fichier SVG en SwiftUI.
J'utilise pour cela la bibliothèque SVGView (https://github.com/exyte/SVGView).
Tout fonctionne bien cependant pour aller plus loin. je dois "parser" le fichier SVG afin de récupérer les "path id", c'est à dire le nom (chaîne) donné aux formes.
J'ai beau scruter les sources de SVGView, je ne vois pas comment faire.
Quelqu'un a-t-il déjà réalisé cela ? Même autrement qu'avec SVGView, bien sûr.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Un SVG, c'est du XML normalement, c'est ce que fait le SVGView.
Il faut le faire à la main je pense.
Mais quand je vois
view.getNode(byId: "part")
dans ta library, j'ai l'impression qu'ils exposent une partie de leur parsing...Si tu as un exemple de SVG et un "path id" particulier, on pourra peut-être t'aider à le retrouver.
Merci Larme.
Voici l'exemple sur lequel je travaille:
Je voudrais récupérer et initialiser un tableau avec "Trac-copie-7", "Trac-copie-6", Trac-copie-5", etc.
Bon, @Larme sur tes conseils, j'ai tout fait à la main. Finalement ce n'était pas difficile (je n'avais pas vu qu'un fichier SVG est en fait un fichier XML ... )
Pour les débutants comme moi qui chercheraient la même chose, voici la soluce.
Une classe:
Une fonction:
En enfin l'utilisation:
let zones = extractPathIDs(from: svgURL) ?? []
Je ne suis pas très sûr de moi concernant l'opérateur de coalescence car zones n'est pas sensé être à nil.
Il faudra que je pousse un peu plus la gestion de cette erreur potentielle.
Cela dépend si tu souhaites différencier 3 cas :
nil : le parser se rate
vide : pas d'ids retrouvés
rempli : des ids retrouvés
Si nil et vide te semblent être pareil, alors au lieu de faire
else { return nil }
, écritelse { return [] }
et change la signature-> [String]?
en-> [String]
.Après test, dans ton cas (je ne suis pas expert en SVG, donc je ne sais pas si tous les paths auront cet attribut
id=
, mais...), sans avoir à parser toi-même, aveclet view = SVGView(contentsOf: svgURL)
Donc en une seule ligne :
Ha oui, c'est plus élégant et plus simple. Merci @Larme