TXMLDocument, struktura xml

Odpowiedz Nowy wątek
2010-10-13 19:02
0

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.

Pozostało 580 znaków

2010-10-13 23:25
eeeeeeeeee
0

Rozumiesz ten kod, czy za każdym razem ktoś ma pisać za Ciebie?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0