Ich versuche, eine SVG Datei (XML) einzulesen. Das funktioniert so weit gut mit:
Delphi-Quelltext
1: 2: 3:
| XMLDocument1.LoadFromFile(OpenDialog1.FileName); Memo1.Lines.Add(XMLDocument1.DocumentElement.ChildNodes['g'].Attributes['id']); Memo1.Lines.Add(XMLDocument1.DocumentElement.ChildNodes['g'].ChildNodes['path'].Attributes['d']); |
Damit lese ich die erste Ebene(g) aus und die Attribute von path. Nun möchte ich aber alle Ebenen auslesen. (in diesem Fall 2). Dies würde ich gern mit einer Schleife tun. Aber wie?
Die SVG Datei ist:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="210mm" height="297mm" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 210 297"> <defs> <style type="text/css"> <![CDATA[ .str0 {stroke:#1F1A17;stroke-width:0.0762} .fil0 {fill:#1F1A17} ]]> </style> </defs> <g id="Ebene_x0020_1"> <metadata id="CorelCorpID_0Corel-Layer"/> <path class="fil0 str0" d="M33.2444 142.642l36.61 -49.0574 71.0234 47.9591 22.3321 47.593c0,21.5999 -51.9862,34.0473 -52.7184,34.4134l-84.5691 -16.8406 7.322 -64.0675z"/> </g> <g id="Ebene_x0020_2"> <metadata id="CorelCorpID_0Corel-Layer"/> <path class="fil0 str0" d="M33.2444 142.642l36.61 -49.0574 71.0234 47.9591 22.3321 47.593c0,21.5999 -51.9862,34.0473 -52.7184,34.4134l-84.5691 -16.8406 7.322 -64.0675z"/> </g> </svg> |
versucht habe ich es so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| g:= XMLDocument1.DocumentElement.ChildNodes['g']; for i:= 0 to g.ChildNodes.Count-1 do begin Memo1.Lines.Add(XMLDocument1.DocumentElement.ChildNodes['g'].ChildNodes['path'].text); end; |
aber g.ChildNodes.Count lifert mir "11". ?? Es gibt aber nur 2 "ChildNodes['g']"