Witam !
Potrzebuję pomocy odnośnie tworzenia xml. Oto kod delphi:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,COMObj, jpeg, ExtCtrls, ComCtrls, xmldom, XMLIntf, msxmldom, XMLDoc;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
XMLDocument1: TXMLDocument;
Label1: TLabel;
Label2: TLabel;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Excel,Excel2:variant;
a:array[1..80000,1..80] of string;
i,j,z,ile,wiersz:longint;
sciezka,sciezka2,puste,gw:string;
XmlDoc : TXMLDocument;
XMLNode : IXMLNode;
XMLValues : IXMLNode;
StartItemNode : IXMLNode;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.open(sciezka);
//liczenie
begin
for z:=1 to 80 do
if excel.cells[1,z].text='3210' then
begin
puste:='sth';
while puste<>'' do
begin
inc(ile);
puste:=excel.cells[ile,z].text;
end;
end;
label2.caption:=inttostr(ile);
//kod ERP
for i:=1 to 80 do
begin
if excel.cells[1,i].text='Kod ERP' then
begin
for j:=2 to ile do
a[j-1,1]:=excel.cells[j,i].text;
end;
end;
// kod producenta
for i:=1 to 80 do
begin
if excel.cells[1,i].text='Kod producenta' then
begin
for j:=2 to ile do
a[j-1,2]:=excel.cells[j,i].text;
end;
end;
// nazwa
for i:=1 to 80 do
begin
if excel.cells[1,i].text='Nazwa' then
begin
for j:=2 to ile do
a[j-1,3]:=excel.cells[j,i].text;
end;
end;
//opis
for i:=1 to 80 do
begin
if excel.cells[1,i].text='Opis' then
begin
for j:=2 to ile do
a[j-1,4]:=excel.cells[j,i].text;
end;
end;
//kod
for i:=1 to 80 do
begin
if excel.cells[1,i].text='Kod' then
begin
for j:=2 to ile do
a[j-1,5]:=excel.cells[j,i].text;
end;
end;
//detal brutto
for i:=1 to 80 do
begin
if excel.cells[1,i].text='Detal (brutto)' then
begin
for j:=2 to ile do
a[j-1,6]:=excel.cells[j,i].text;
end;
end;
end;
xmlDoc := TXMLDocument.Create(nil);
try
XmlDoc.Active := True;
StartItemNode := XMLDoc.AddChild('ROOT');
XMLnode := XMLDoc.DocumentElement.AddChild('TOWARY');
XMLValues := XMLNode.AddChild('WERSJA');
XMLValues.Text := '1.00';
XMLValues := XMLNode.AddChild('BAZA_ZRD_NAZWA');
XMLValues.Text := 'TRON Computers3 S.C.';
for I := 1 to ile-2 do
begin
if (i=1) then
XMLNode := XMLNode.AddChild('TOWAR');
if (i<>1) then
XMLNode := XMLNode.parentnode.AddChild('TOWAR');
XMLValues := XMLNode.AddChild('KOD');
If (a[i,1]='') then
begin
XMLValues.Text := ' '
end
else
begin
XMLValues.Text := a[i,1];
end;
XMLValues := XMLNode.AddChild('TYP');
XMLValues.Text := '1';
XMLValues := XMLNode.AddChild('PRODUKT');
XMLValues.Text := '0';
XMLValues := XMLNode.AddChild('NUMER_KAT');
If (a[i,2]='') then
begin
XMLValues.Text := ' '
end
else
begin
XMLValues.Text := a[i,2];
end;
If (a[i,2]='') then XMLValues.Text := ' ';
XMLValues := XMLNode.AddChild('SWW');
XMLValues := XMLNode.AddChild('EAN');
XMLValues := XMLNode.AddChild('NAZWA');
If (a[i,3]='') then
begin
XMLValues.Text := ' '
end
else
begin
XMLValues.Text := a[i,3];
end;
If (a[i,3]='') then XMLValues.Text := ' ';
XMLValues := XMLNode.AddChild('GRUPA');
XMLValues.Text := 'KMPT';
XMLValues := XMLNode.AddChild('URL');
XMLNode := XMLNode.AddChild('KATEGORIA_SPRZEDAZY');
XMLValues := XMLNode.AddChild('OPIS_KATEGORII');
XMLNode := XMLNode.ParentNode.AddChild('KATEGORIA_ZAKUPOW');
XMLValues := XMLNode.AddChild('OPIS_KATEGORII');
XMLValues := XMLNode.ParentNode.AddChild('NIEAKTYWNY');
XMLValues.Text := '0';
XMLValues := XMLNode.ParentNode.AddChild('OPIS');
If (a[i,4]='') then
begin
XMLValues.Text := ' '
end
else
begin
XMLValues.Text := a[i,4];
end;
XMLValues := XMLNode.ParentNode.AddChild('EDYCJA_NAZWY');
XMLValues.Text := '1';
XMLValues := XMLNode.ParentNode.AddChild('KOPIUJ_OPIS');
XMLValues.Text := '1';
XMLValues := XMLNode.ParentNode.AddChild('EDYCJA_OPISU');
XMLValues.Text := '1';
XMLValues := XMLNode.ParentNode.AddChild('JM');
XMLValues.Text := 'szt.';
XMLValues := XMLNode.ParentNode.AddChild('JMZ');
XMLValues := XMLNode.ParentNode.AddChild('JM_PRZELICZNIK_L');
XMLValues.Text := '1.00';
XMLValues := XMLNode.ParentNode.AddChild('JM_PRZELICZNIK_M');
XMLValues.Text := '1';
XMLValues := XMLNode.ParentNode.AddChild('JM_CALKOWITE');
XMLValues.Text := '1';
XMLValues := XMLNode.ParentNode.AddChild('KAUCJA');
XMLValues.Text := '0';
XMLValues := XMLNode.ParentNode.AddChild('UDOSTEPNIAJ_W_CENNIKU');
XMLValues.Text := '0';
XMLValues := XMLNode.ParentNode.AddChild('E_SKLEP');
XMLValues.Text := '0';
XMLValues := XMLNode.ParentNode.AddChild('TYP_MINIMUM');
XMLValues.Text := '0';
XMLValues := XMLNode.ParentNode.AddChild('MIN_CENA_MARZA');
XMLValues.Text := '0.000';
XMLNode := XMLNode.ParentNode.AddChild('WALUTA');
XMLValues := XMLNode.AddChild('SYMBOL');
XMLValues.Text := 'PLN';
XMLValues := XMLNode.AddChild('KURS_NUMER');
XMLValues.Text := '2';
XMLValues := XMLNode.AddChild('KURS_L');
XMLValues.Text := '1.00';
XMLValues := XMLNode.AddChild('KURS_M');
XMLValues.Text := '1';
XMLNode := XMLNode.ParentNode.AddChild('KOSZT_USLUGI');
XMLValues := XMLNode.AddChild('WALUTA');
XMLValues.Text := '0.00';
XMLValues := XMLNode.AddChild('WARTOSC');
XMLValues.Text := '0.00';
XMLValues := XMLNode.AddChild('TYP');
XMLValues.Text := '1';
XMLNode := XMLNode.ParentNode.AddChild('DOSTAWCA');
XMLValues := XMLNode.AddChild('KOD_U_DOSTAWCY');
If (a[i,5]='') then
begin
XMLValues.Text := ' '
end
else
begin
XMLValues.Text := a[i,5];
end;
XMLNode := XMLNode.ParentNode.AddChild('ILOSC_MIN');
XMLValues.Text := '0.0000';
XMLValues := XMLNode.AddChild('ILOSC_MIN_JM');
XMLValues.Text := 'szt.';
XMLValues := XMLNode.AddChild('ILOSC_MAX');
XMLValues.Text := '0.0000';
XMLValues := XMLNode.AddChild('ILOSC_MAX_JM');
XMLValues.Text := 'szt.';
XMLValues := XMLNode.AddChild('ILOSC_ZAM');
XMLValues.Text := '0.0000';
XMLValues := XMLNode.AddChild('ILOSC_ZAM_JM');
XMLValues.Text := 'szt.';
XMLNode := XMLNode.ParentNode.AddChild('STAWKA_VAT');
XMLValues := XMLNode.AddChild('STAWKA');
XMLValues.Text := '22.00';
XMLValues := XMLNode.AddChild('FLAGA');
XMLValues.Text := '2';
XMLValues := XMLNode.AddChild('ZRODLOWA');
XMLValues.Text := '0.00';
XMLNode := XMLNode.ParentNode.AddChild('STAWKA_VAT_ZAKUPU');
XMLValues := XMLNode.AddChild('STAWKA');
XMLValues.Text := '22.00';
XMLValues := XMLNode.AddChild('FLAGA');
XMLValues.Text := '2';
XMLValues := XMLNode.AddChild('ZRODLOWA');
XMLValues.Text := '0.00';
XMLValues := XMLNode.ParentNode.AddChild('NUMER_CENY');
XMLValues.Text := '5';
XMLValues := XMLNode.ParentNode.AddChild('CENA_DOMYSLNA');
XMLValues.Text := 'detaliczna';
XMLNode := XMLNode.ParentNode.AddChild('CENY');
XMLNode := XMLNode.AddChild('CENA');
XMLValues := XMLNode.AddChild('TYP');
XMLValues.Text := '1';
XMLValues := XMLNode.AddChild('NUMER');
XMLValues.Text := '1';
XMLValues := XMLNode.AddChild('NAZWA');
XMLValues.Text := 'zakupu';
XMLValues := XMLNode.AddChild('WARTOSC');
XMLValues.Text := '0.00';
XMLValues := XMLNode.AddChild('SYMBOL_WALUTY');
XMLValues.Text := 'PLN';
XMLValues := XMLNode.AddChild('ZAOKRAGLENIE');
XMLValues.Text := '0.01';
XMLValues := XMLNode.AddChild('MARZA');
XMLValues.Text := '0.00';
XMLValues := XMLNode.AddChild('MARZAWSTU');
XMLValues.Text := '0.00';
XMLValues := XMLNode.AddChild('OFFSET');
XMLValues.Text := '0.00';
XMLValues := XMLNode.AddChild('AKTUALIZACJA');
XMLValues.Text := '0';
XMLNode := XMLNode.ParentNode.AddChild('CENA');
XMLValues := XMLNode.AddChild('TYP');
XMLValues.Text := '2';
XMLValues := XMLNode.AddChild('NUMER');
XMLValues.Text := '5';
XMLValues := XMLNode.AddChild('NAZWA');
XMLValues.Text := 'detaliczna';
XMLValues := XMLNode.AddChild('WARTOSC');
If (a[i,6]='') then
begin
XMLValues.Text := ' '
end
else
begin
XMLValues.Text := a[i,6];
end;
XMLValues := XMLNode.AddChild('SYMBOL_WALUTY');
XMLValues.Text := 'PLN';
XMLValues := XMLNode.AddChild('ZAOKRAGLENIE');
XMLValues.Text := '0.01';
XMLValues := XMLNode.AddChild('MARZA');
XMLValues.Text := '100.00';
XMLValues := XMLNode.AddChild('MARZAWSTU');
XMLValues.Text := '-100.00';
XMLValues := XMLNode.AddChild('OFFSET');
XMLValues.Text := '0.00';
XMLValues := XMLNode.AddChild('AKTUALIZACJA');
XMLValues.Text := '1';
XMLNode :=xmlnode.parentnode.ParentNode.parentnode.addchild('ZAMIENNIKI') ;
end;
XmlDoc.SaveToFile(sciezka2);
finally
xmlDoc := nil;
end;end;
procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.Execute;
sciezka:=opendialog1.FileName;
edit1.Text:=sciezka;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
savedialog1.Execute;
sciezka2:=savedialog1.FileName;
edit2.Text:=sciezka2;
end;
end.
Oto jaką tworzy strukturę(końcówka xml):
- <CENY>
- <CENA>
<TYP>1</TYP>
<NUMER>1</NUMER>
<NAZWA>zakupu</NAZWA>
<WARTOSC>0.00</WARTOSC>
<SYMBOL_WALUTY>PLN</SYMBOL_WALUTY>
<ZAOKRAGLENIE>0.01</ZAOKRAGLENIE>
<MARZA>0.00</MARZA>
<MARZAWSTU>0.00</MARZAWSTU>
<OFFSET>0.00</OFFSET>
<AKTUALIZACJA>0</AKTUALIZACJA>
</CENA>
- <CENA>
<TYP>2</TYP>
<NUMER>5</NUMER>
<NAZWA>detaliczna</NAZWA>
<WARTOSC>5 741,90</WARTOSC>
<SYMBOL_WALUTY>PLN</SYMBOL_WALUTY>
<ZAOKRAGLENIE>0.01</ZAOKRAGLENIE>
<MARZA>100.00</MARZA>
<MARZAWSTU>-100.00</MARZAWSTU>
<OFFSET>0.00</OFFSET>
<AKTUALIZACJA>1</AKTUALIZACJA>
</CENA>
</CENY>
</TOWAR>
<ZAMIENNIKI />
A taką strukturę powinien tworzyć:
- <CENY>
- <CENA>
<TYP>1</TYP>
<NUMER>1</NUMER>
<NAZWA>zakupu</NAZWA>
<WARTOSC>929.00</WARTOSC>
<SYMBOL_WALUTY>PLN</SYMBOL_WALUTY>
<ZAOKRAGLENIE>0.01</ZAOKRAGLENIE>
<MARZA>0.00</MARZA>
<MARZAWSTU>0.00</MARZAWSTU>
<OFFSET>0.00</OFFSET>
<AKTUALIZACJA>0</AKTUALIZACJA>
</CENA>
- <CENA>
<TYP>2</TYP>
<NUMER>5</NUMER>
<NAZWA>detaliczna</NAZWA>
<WARTOSC>1140.00</WARTOSC>
<SYMBOL_WALUTY>PLN</SYMBOL_WALUTY>
<ZAOKRAGLENIE>0.01</ZAOKRAGLENIE>
<MARZA>0.58</MARZA>
<MARZAWSTU>-100.00</MARZAWSTU>
<OFFSET>0.00</OFFSET>
<AKTUALIZACJA>1</AKTUALIZACJA>
</CENA>
</CENY>
<ZAMIENNIKI />
</TOWAR>
Czyli prościej, to <ZAMIENNIKI /> powinny być jedną linię wyżej.
Z góry dziękuję za pomoc, pozdrawiam.