GeoGet

Complete geocaching solutions

User Tools

Site Tools


user:navody:xml_parser

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);
user/navody/xml_parser.txt · Last modified: 2015/09/21 00:00 (external edit)