Jump to content


Photo

Full XMP Export and Import


  • Please log in to reply
2 replies to this topic

#1 mcinternet

mcinternet
  • Members
  • 101 posts
  • Gender:Male

Posted 08 May 2007 - 12:42 AM

CODE
Unit xmlkram;
interface
   uses NxGrid, simploxml;


  function formxmlbegin(inhalt : string) : string;
  function formxmlend(inhalt : string) : string;
  function formxml(name,inhalt : string) : string;
  function getxml(xml_var : TsimploXML; kategorie, inhalt : string; stufe2 : string = ''; typ : integer =1) : string;
  function nextgrid_importfromxml(grid : TNextGrid; xmlname, xmldata : string; hdr : boolean = false): boolean;
  function nxgrid_ExportToXml(const NextGrid: TNextGrid; gridname : string = ''; hdr : boolean = true) : string;


implementation
  uses  NxCustomGridControl, NxColumnClasses, NxColumns, Classes, Dialogs,
        IniFiles, StrUtils, SysUtils, Variants, NxCustomGrid;


function nxgrid_ExportToXml(const NextGrid: TNextGrid; gridname : string = ''; hdr : boolean = true) : string;
  var strl    : TStringlist;
      c, r    : integer;
     _c, _r   : string;
     stmp     : string;
begin
  strl := TStringList.Create;
  if hdr then begin
    strl.Add('<?xml version="1.0" encoding="ISO-8859-1"?>');
    strl.Add(formxmlbegin('standalone'));
  end;
  if gridname = '' then gridname := nextgrid.Name;
  strl.Add(formxmlbegin(gridname));
  with nextgrid do begin
    strl.Add(formxml('Zeilen',inttostr(rowcount)));
    strl.Add(formxml('Spalten',inttostr(Columns.Count)));
    for c := 0 to Columns.Count - 1 do begin
      strl.Add(formxml('spaltentyp'+inttostr©,columns[c].ClassName));
      strl.Add(formxml('spaltenheader'+inttostr©,columns[c].Header.Caption));
      strl.Add(formxml('spaltenname'+inttostr©,columns[c].name));
      strl.Add(formxml('spaltensortierung'+inttostr©,inttostr(ord(columns[c].SortKind))));
      strl.Add(formxml('spaltenvisible'+inttostr©,inttostr(ord(columns[c].visible))));
      strl.Add(formxml('spaltenbreite'+inttostr©,inttostr(columns[c].Width)));
      strl.Add(formxml('spaltenposition'+inttostr©,inttostr(columns[c].Position)));
      strl.Add(formxml('spaltenfooter'+inttostr©,columns[c].Footer.Caption));
    end;
    for r := 0 to rowcount - 1 do begin
      _r := 'zeile'+inttostr®;
      strl.Add(formxmlbegin(_r));
      for c := 0 to Columns.Count - 1 do begin
        _c := 'spalte'+inttostr©;
        stmp := cells[c,r];
        strl.Add(formxml(_c,stmp));
      end;
      strl.Add(formxmlend(_r));
    end;
  end;
  strl.Add(formxmlend(gridname));
  if hdr then strl.Add(formxmlend('standalone'));
  result := strl.Text;
  freeandnil(strl);
end;

// XML-Format
function formxml(name,inhalt : string) : string;
begin
  result := formxmlbegin(name)+inhalt+formxmlend(name);
end;
function formxmlbegin(inhalt : string) : string;
begin
  result := '<'+inhalt+'>';
end;
function formxmlend(inhalt : string) : string;
begin
  result := '</'+inhalt+'>';
end;

function getxml(xml_var : TsimploXML; kategorie, inhalt : string; stufe2 : string = ''; typ : integer =1) : string;
  var ergebnis : string;
begin
  // für den Fehlerfall
    case typ of
      1: ergebnis := '';  // string
      2: ergebnis := '0'; // integer
      3: ergebnis := '01.01.1900'; // Datum
      4: ergebnis := '0'; // Boolean
      5: ergebnis := '0,0'; // Float
    end;
  try
    if stufe2 = '' then result := Xml_var.root.ElementsByName(kategorie)[0].ElementsByName(inhalt)[0].Text
      else result := Xml_var.root.ElementsByName(kategorie)[0].ElementsByName(inhalt)[0].ElementsByName(stufe2)[0].Text;
  except
    result := ergebnis;
  end;
end;

function nextgrid_importfromxml(grid : TNextGrid; xmlname, xmldata : string; hdr : boolean = false): boolean;
  var xml : TSimploXML;
   cclass : TNxColumnClass;
     stmp : string;
    c,i,r : integer;
  spalten : integer;
  zeilen  : integer;
begin
  result := false;
  RegisterClasses([TNxTextColumn, TNxNumberColumn, TnxComboBoxColumn, TNxCheckBoxColumn, TNxDateColumn
                  , TNxCustomColumn, TNxTreeColumn, TNxButtonColumn, TNxHtmlColumn, TNxImageColumn
                  , TNxProgressColumn, TNxRateColumn, TNxPopupColumn, TNxStringsColumn, TNxIncrementColumn
                  , TNxListColumn, TNxCustomNumberColumn, TNxCalcColumn, TNxDateColumn, TNxGraphicColumn]);


  stmp := grid.Name;

  if hdr then xmldata :=  '<?xml version="1.0" encoding="ISO-8859-1"?>'+#10#13
                         +'<standalone>'+xmldata+#10#13+'</standalone>';

  xml := TSimploXML.Create(NIL);
  xml.LoadFromString(xmldata);
  try
    c := strtoint(getxml(xml,xmlname,'Spalten','',2));
    spalten := c;
    zeilen := strtoint(getxml(xml,xmlname,'Zeilen','',2));
    with grid do begin
      for i := 0 to c - 1 do begin
        Columns.Add(TNxColumnClass(getclass(getxml(xml, xmlname, 'spaltentyp'+inttostr(i),'',2))));
        Columns[i].Name := getxml(xml, xmlname, 'spaltenname'+inttostr(i),'',1);
        Columns[i].Header.Caption := getxml(xml, xmlname, 'spaltenheader'+inttostr(i),'',1);
        Columns[i].Visible := boolean(strtoint(getxml(xml, xmlname, 'spaltenvisible'+inttostr(i),'',2)));
        Columns[i].sortkind := Tsortkind(strtoint(getxml(xml, xmlname, 'spaltensortierung'+inttostr(i),'',2)));
        Columns[i].width := strtoint(getxml(xml, xmlname, 'spaltenbreite'+inttostr(i),'',2));
        Columns[i].position := strtoint(getxml(xml, xmlname, 'spaltenposition'+inttostr(i),'',2));
        Columns[i].footer.Caption := getxml(xml, xmlname, 'spaltenfooter'+inttostr(i),'',1);
      end;
      AddRow(zeilen);
      xml.Root.Name := xmlname;
      for r := 0 to zeilen - 1 do begin
        for c := 0 to spalten - 1 do begin
          Cells[c,r] := getxml(xml,xmlname ,'zeile'+inttostr®,'spalte'+inttostr©,1);
        end;
      end;
    end;
  finally
    freeandnil(xml);
    result := true;
  end;
end;



end.


Brgs

McInternet

#2 RussiaOnline

RussiaOnline
  • Members
  • 35 posts

Posted 12 June 2007 - 01:56 PM

Where is simploxml unit ?

#3 wvd_vegt

wvd_vegt

    Master Member

  • Honorable Members
  • PipPipPipPipPip
  • 710 posts
  • Gender:Male
  • Location:the Netherlands

Posted 12 June 2007 - 06:18 PM

Hi,

QUOTE (RussiaOnline @ Jun 12 2007, 02:56 PM) <{POST_SNAPBACK}>
Where is simploxml unit ?


Search for it on google, it's a 3rd party xml parser.
G.W. van der Vegt




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users