Toujours dans une tentative de lire des fichiers SVG pour remplir les chemins d'un TPath (cf https://delphi.developpez.com/telech...s-images-sympa) je tente d'ouvrir ce type de fichier via un XMLDocument
Voilà le code actuel (note : memo1.lines.add( ) est remplacé par Path1.data.AddPath() dans le programme, mais comme il s'agit avant tout de la lecture du xml cela simplifie)
1- j'ai tenté de m'affranchir du composant TXMLDocument mais certains fichiers (une fois n'est pas coutume, les plus simples, me lèvent une erreur) exemple fichier Android.svgCode:
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 procedure TForm1.Button1Click(Sender: TObject); var Doc: IXMLDocument; Data: IXMLNode; Node, CNode: IXMLNode; I, J: Integer; begin Memo1.Lines.Clear; // Doc := LoadXMLDocument(Edit1.text); XMLDocument1.FileName:=Edit1.Text; XMLDocument1.Active:=True; Data := XMLDocument1.DocumentElement; // chercher attributes "viewbow" for I := 0 to Data.ChildNodes.Count-1 do begin Node := Data.ChildNodes[I]; if SameText(Node.NodeName,'path') then memo1.lines.add(Node.Attributes['d']); if SameText(Node.NodeName,'g') then if Node.ChildNodes.Count>0 then begin for J := 0 to Node.ChildNodes.Count-1 do begin CNode:=Node.ChildNodes[J]; if SameText(CNode.NodeName,'path') then Memo1.Lines.Add(CNode.Attributes['d']); end; end else memo1.Lines.Add(Node.Attributes['d']); end; XMLDocument1.Active:=False; end;
Comment m'en sortir ou plutôt pourquoi j'ai cette erreur, le TXMLDocument fonctionnant pour les autres.Citation:
Envoyé par Erreur
2- j'ai des fichiers de structure plus complexe des noeuds g dans des noeuds g etc... est-il possible de s'en sortir dans ce cas ? exemple fichier portablejim-Chess-tile-Pawn.svg
des idées ?
À vrai dire c'est surtout le point 1 que j'aimerai éclaircir (les fichiers trop complexes je m'en passerai ;)) déjà qu'il y a l'attribut 'transform' avec la valeur "matrix= x x x x x x" qui m'interpelle pas mal
(voir celtic-triskell-01.svg)