Soubory XML, vytvoření, načtení, rozbor |
Top Previous Next |
Seznam témat:
Vytvoření souboru XML se dvěma elementy na druhé úrovni var Xml: TXMLDocument; Item: TXMLItem; begin Xml := TXMLDocument.Create('xml', 'version="1.0" encoding="windows-1250"'); try Item := Xml.AddChild('MESSAGE');
with Item.AddChild('ARTICLE') do begin Attribute['ID'] := 'A12465'; Text := 'Savo Extra 500ml'; end;
with Item.AddChild('ARTICLE') do begin Attribute['ID'] := 'A96133'; Text := 'Rukavice gumové'; end;
Xml.SaveToFile('c:\demo1.xml'); finally Xml.Free; end; ShowMessage('Done.'); end.
Načtení souboru XML, modifikace, uložení var Xml: TXMLDocument; Item: TXMLItem; begin Xml := TXMLDocument.Create('xml', 'version="1.0" encoding="windows-1250"'); try Xml.LoadFromFile('c:\demo1.xml'); Item := Xml.FindChild('MESSAGE'); Item := Item.GetFirstChild;
//projdi všechny uzly "ARTICLE" a pro každý... while Item <> nil do begin
//...přidej atribut "SKLADEM" Item.Attribute['SKLADEM'] := 'ANO';
//...přidej poduzel "SKLAD" with Item.AddChild('SKLAD') do Text := 'S001';
//posun na další uzel stejné úrovně Item := Item.GetNextSibling; end;
Xml.SaveToFile('c:\demo2.xml'); finally Xml.Free; end; end.
Export skladových položek do XML Příklad ukazuje reálný export skladových položek a přiřazených kategorií do XML.
var Xml: TXMLDocument; DocItem,RowItem,CatItem: TXMLItem; QryMater: TQuery; QryCateg: TQuery; Progress: TProgress; I: integer; begin Progress := TProgress.CreateSimple('Export', 'Probíhá export skladových položek. Prosím, čekejte...'); try Xml := TXMLDocument.Create('xml', 'version="1.0" encoding="windows-1250"'); try QryMater := TQuery.Create(nil); QryCateg := TQuery.Create(nil); try //dotaz pro select ze skl. položek (omater) QryMater.DatabaseName := DefaultDatabaseName; QryMater.SQL.Add('SELECT id_material, nazev, mj_id,mjvydej_id,'); QryMater.SQL.Add('obvcena, obvcenasdph, typmat, druh_id, skp,'); QryMater.SQL.Add('spdan, dph, mena_id, prcena, prcenasdph,'); QryMater.SQL.Add('marze, rabat, skupina_id, spdan, spdankod'); QryMater.SQL.Add('FROM dba.omater'); QryMater.Open;
//dotaz pro select z kategorií (omkateg) a přiřaz. tabulky (gfpriraz) QryCateg.DatabaseName := DefaultDatabaseName; QryCateg.SQL.Add('SELECT k.id_kat, k.popis'); QryCateg.SQL.Add('FROM dba.ompriraz p, dba.omkateg k'); QryCateg.SQL.Add('WHERE p.kat_id=k.id_kat and'); QryCateg.SQL.Add(' p.material_id = :id_material'); QryCateg.Prepare; //Prepare je efektivní v případech, kdy se stejný //SQL opakovaně otevírá jen s obměnou parametrů
DocItem := Xml.AddChild('OMATER'); while not QryMater.Eof do begin RowItem := DocItem.AddChild('ROW');
//export sloupců z QryMater for I := 0 to QryMater.FieldCount-1 do with RowItem.AddChild(Uppercase(QryMater.Fields[I].FieldName)) do Text := VarToCompatibleStr(QryMater.Fields[I].Value);
//refresh dotazu na kategorie QryCateg.Params[0].AsString := QryMater.FieldByName('id_material').AsString; QryCateg.Close; QryCateg.Open;
//export sloupců z QryCateg while not QryCateg.Eof do begin CatItem := RowItem.AddChild('CATEGORY');
for I := 0 to QryCateg.FieldCount-1 do with CatItem.AddChild(Uppercase(QryCateg.Fields[I].FieldName)) do Text := VarToCompatibleStr(QryCateg.Fields[I].Value);
QryCateg.Next; end;
QryMater.Next; end; finally QryCateg.Free; QryMater.Free; end; Xml.SaveToFile('c:\omater.xml'); finally Xml.Free; end;
finally Progress.Free; end; end.
Související témata |