XML parser
GeoGet obsahuje XML parser již dlouho, ale od verze 2.6 je tento parser dostupný i všem skriptům. Jako parser je použita volně dostupná knihovna. V uvedeném odkazu je k dispozici celý projekt, ale dokumentace je velmi strohá, a to je hodně nadnesené tvrzení.
Použití ve skriptu můžeme demonstrovat na jednoduchém příkladu:
uses simplexml; ... procedure PluginStop; var Xml: TJclSimpleXML; n: integer; s: string; ele: TJclSimpleXMLElem; begin Xml := TJclSimpleXML.Create; try xml.loadfromfile('test.gpx', seAuto, 0); //nebo lepe (viz upozorneni pod prikladem) //xml.loadfromfile('test.gpx', seUTF, 0); showmessage(XML.Root.Name); for n := 0 to XML.Root.Items.count - 1 do begin ele := XML.Root.Items[n]; if ele.name = 'wpt' then begin s := 'X:' + ele.properties.ItemNamed['lat'].Value; s := s + ' Y:' + ele.properties.ItemNamed['lon'].Value; showmessage(s); ele := ele.items.Itemnamed['cache']; if assigned(ele) then begin ele := ele.items.Itemnamed['long_description']; if assigned(ele) then begin s := ele.value; Stringtofile(s, 'test.txt'); end; end; end; end; finally xml.free; end; end;
Zdá se, že druhý parametr seAuto funkce LoadFromFile() nepracuje úplně spolehlivě. Občas se mi stává (při krátkých souborech?), že výsledek parsování není převeden do požadovaného výstupního kódování (třetí parametr funkce, 0=ANSI a zkoušel jsem pod Windows i 1250), ale zůstává ve vstupním kódování souboru. Pokud jsem druhým parametrem předepsal použité vstupní kódování (např. seUTF8), na chybné kódování výstupu jsem nenarazil. Takže doporučuji raději použít
xml.LoadFromFile('test.gpx', seUTF8, 0);