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: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221:
| unit xmlreader;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,StrUtils,Shellapi, XMLDoc, XMLIntf;
type POrt=^Ort; Ort=record name :string; x : integer; y : integer; naechster : POrt; vorheriger: POrt end;
TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; Button3: TButton; procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
TSP = class(TObject) Stadt: POrt; ChildList: IXMLNodeList; OrtListe: POrt; procedure LoadXML(adresse:String); procedure SaveXML(adresse:String); procedure GetTree(Liste:IXMLNodeList;isfolder:boolean;foldername:string;tiefe:integer); function GetTown(Liste:IXMLNodeList):Ort; private public myXML: IXMLDocument; end;
var SalesMan: TSP; Form1: TForm1; implementation
function TSP.GetTown(Liste: IXMLNodeList): Ort; var a,b:integer; node:IXMLNode;var namelist:IXMLNodeList;var namenode:IXMLNode;var pointlist: IXMLNodeList;var PointNode:IXMLNode;var coordstring:string; var MeinOrt:POrt; begin a:=0; while a<Liste.Count do begin node:=Liste.Get(a); a:=a+1; end; a:=0; while a<Liste.Count do begin node:=Liste.Get(a); if node.NodeName='name' then begin namelist:=node.ChildNodes; namenode:=namelist.first; Form1.memo1.text:=Form1.memo1.text+chr(13)+chr(10)+'Willkommen in '+Vartostr(Namenode.NodeValue); end else if node.Nodename='Point' then begin pointlist:=node.ChildNodes; b:=0; while b<pointList.Count do begin pointnode:=Pointlist.Get(b); if Pointnode.NodeName='coordinates' then begin coordstring:=Vartostr(Pointnode.NodeValue); Form1.memo1.text:=Form1.memo1.text+chr(13)+chr(10)+' '+copy(coordstring,1,pos(',',coordstring)-1); Form1.memo1.text:=Form1.memo1.text+chr(13)+chr(10)+' '+copy(coordstring,pos(',',coordstring)+1,posex(',',coordstring,pos(',',coordstring))-1); end; b:=b+1; end;
end;
a:=a+1; end; end;
procedure TSP.GetTree(Liste: IXMLNodeList; isfolder: boolean; foldername: string; tiefe: integer); var node:IXMLNode; var namelist:IXMLNodeList; var namenode:IXMLNode; var a:integer; begin a:=0; while (a<Liste.Count) do begin node:=Liste.Get(a); if node.Nodename='Folder' then begin Form1.memo1.text:=Form1.memo1.text+chr(13)+chr(10)+node.Nodename+'ORDNER'; GetTree(node.ChildNodes,True,foldername,tiefe); end else if ((node.Nodename='Placemark') and (tiefe=2)) then begin Form1.memo1.text:=Form1.memo1.text+chr(13)+chr(10)+node.Nodename+'Stadt kommt'; GetTown(node.ChildNodes); end else if ((node.Nodename='Placemark') and (tiefe=1)) then begin Form1.memo1.text:=Form1.memo1.text+chr(13)+chr(10)+node.Nodename+'Route gefunden'; GetTown(node.ChildNodes); end else if (node.Nodename='name') then begin nameList:=node.ChildNodes; namenode:=namelist.First; if Vartostr(namenode.NodeValue)=foldername then begin tiefe:=tiefe+1; if tiefe=1 then foldername:='Orte'; end; end else begin Form1.memo1.text:=Form1.memo1.text+chr(13)+chr(10)+node.NodeName; GetTree(node.ChildNodes,isfolder,foldername,tiefe); end; a:=a+1; end; end;
procedure TSP.LoadXML(adresse: String); var mywert:integer; begin mywert:=mywert+1; myXML:=newXMLDocument; myXML.LoadFromFile(adresse); myXML.Active:=True; ChildList:=MyXML.ChildNodes; Form1.memo1.Text:=Inttostr(ChildList.Count); GetTree(ChildList,False,'Handelsreise',0); end;
procedure TSP.SaveXML(adresse: String); var Datei:Textfile; var a:Integer; begin AssignFile(Datei,adresse); rewrite(Datei); writeln(Datei,'<?xml version="1.0" encoding="UTF-8"?>'); writeln(Datei,'<kml xmlns="http://earth.google.com/kml/2.2">'); writeln(Datei,' <Folder>'); writeln(Datei,' <name>Reise</name>'); writeln(Datei,' <open>1</open>'); writeln(Datei,' <Folder>'); writeln(Datei,' <name>Orte</name>'); writeln(Datei,' <open>1</open>'); for a := 0 to 6 do begin writeln(Datei,' <Placemark>'); writeln(Datei,' <name>Ort'+inttostr(a)+'</name>'); writeln(Datei,' <Point><coordinates>'+inttostr(a*3)+'.00000000000000,'+inttostr(a*10)+'.00000000000000,0</coordinates></Point>'); writeln(Datei,' </Placemark>'); end; writeln(Datei,' </Folder>'); writeln(Datei,' <Placemark>'); writeln(Datei,' <name>Route</name>'); writeln(Datei,' <LineString>'); writeln(Datei,' <coordinates>'); for a := 0 to 6 do begin writeln(Datei,inttostr(a*3)+'.00000000000000,'+inttostr(a*10)+'.00000000000000,0 '); end; writeln(Datei,' </coordinates>'); writeln(Datei,' </LineString>'); writeln(Datei,' </Placemark>'); writeln(Datei,'</Folder>'); writeln(Datei,'</kml>'); CloseFile(Datei);
end;
{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin SalesMan.LoadXML('E:\Eigene Dateien\Studium\Semester3\ProgrammiersprachenII\Traveling Salesman\Handelsreise2.kml'); end;
procedure TForm1.Button2Click(Sender: TObject); begin SalesMan.SaveXML('E:\Eigene Dateien\Studium\Semester3\ProgrammiersprachenII\Traveling Salesman\Handelsreise5.kml'); end;
procedure TForm1.Button3Click(Sender: TObject); begin ShellExecute(Application.Handle,'open','D:\Programme\Google\Google Earth\GoogleEarth.exe','"E:\Eigene Dateien\Studium\Semester3\ProgrammiersprachenII\Traveling Salesman\Handelsreise5.kml"','E:\Eigene Dateien\Studium\Semester3\ProgrammiersprachenII\Traveling Salesman\',SC_DEFAULT); end;
end. |