TXMLDocument de node ların yazılma sırasına müdahale

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

TXMLDocument de node ların yazılma sırasına müdahale

Mesaj gönderen varyemez »

Datasetten okuyup şeması verilen bir XML dosyasına yazdırma işi yapıyorum , sorun yok normal çıktı alabiliyorum ancak halledemediğim bir tuhaflık çıktı şimdi de. Node ve child lerin yerini sırasını txmldocument kendisi belirliyor. Olması gereken sıra aşağıdaki gibi.

Kod: Tümünü seç

 <?xml version="1.0" encoding="ISO-8859-9" ?> 
 <transfer>
  <sourceGLN>8680001083589</sourceGLN> 
  <destinationGLN>8680001296743</destinationGLN> 
  <actionType>S</actionType> 
  <documentDate>2011-05-19</documentDate> 
  <documentNumber>145</documentNumber> 
  <note>deneme notudur</note> 
 <carrier carrierLabel="DENEME LABELI">
      <productList GTIN="8699536090115" expirationDate="2013-10-31" lotNumber="10001150">
           <serialNumber>GZ9U90PRTNIJ3BJL</serialNumber> 
           <serialNumber>GZ9U90PRTDERFRG</serialNumber>
  </productList>
  <productList GTIN="8699536090115" expirationDate="2015-10-31" lotNumber="10001254">
           <serialNumber>90PRTNIJ3BJL</serialNumber> 
           <serialNumber>PRTDERFRG</serialNumber>
  </productList>
  </carrier>
  </transfer>
orijinal yapı yukarıdaki gibi olması gerektiği halde bizim dosya aşağıdaki gibi oluşuyor

Kod: Tümünü seç

 <?xml version="1.0" encoding="ISO-8859-9" ?> 
 <transfer>
   <carrier carrierLabel="DENEME LABELI">
      <productList GTIN="8699536090115" expirationDate="2013-10-31" lotNumber="10001150">
           <serialNumber>GZ9U90PRTNIJ3BJL</serialNumber> 
           <serialNumber>GZ9U90PRTDERFRG</serialNumber>
  </productList>
  <productList GTIN="8699536090115" expirationDate="2015-10-31" lotNumber="10001254">
           <serialNumber>90PRTNIJ3BJL</serialNumber> 
           <serialNumber>PRTDERFRG</serialNumber>
  </productList>
  </carrier>
   <sourceGLN>8680001083589</sourceGLN>     ******bizim çıktıda bu kısım en sonda yazılıyor 
  <destinationGLN>8680001296743</destinationGLN> 
  <actionType>S</actionType> 
  <documentDate>2011-05-19</documentDate> 
  <documentNumber>145</documentNumber> 
  <note>deneme notudur</note>                ***** buraya kadar 
  </transfer>
TXMLDocument ve XML binding kullanarak yaptım. kodlar aşağıda.

Kod: Tümünü seç

procedure TForm1.btn1Click(Sender: TObject); // xml yazdırma
var
anados: IXMLTransferType;
kariyer: IXMLCarrierType;
urunlist: IXMLProductListType;
kariyera:IXMLCarrierType;
urunlera:IXMLProductListType ;
mindex,ymindex,biltipi:string;
begin
case radiogroup1.ItemIndex of
0: biltipi:='V';
1: biltipi:='A';
2: biltipi:='F';
3: biltipi:='S';
4: biltipi:='C';
5: biltipi:='D';
end;
StatusBar2.Panels[1].Text:='Lütfen bekleyiniz.. işlem uzun sürebilir';
mindex:='';
ymindex:='1';

xmldcmnt1.CleanupInstance;
anados:=Gettransfer(xmldcmnt1);
 xmldcmnt1.Encoding:='ISO-8859-9';
 xmldcmnt1.Version:='1.0';

 anados.SourceGLN:=eczGLN;
 anados.DestinationGLN:=Label10.Caption;
 anados.ActionType:=biltipi;
 anados.DocumentDate:=DateToStr(DateTimePicker3.DateTime);
 anados.DocumentNumber:=LblEditDN.Text;
 anados.Note:='deneme notudur';
 kariyer:=anados.AddChild('carrier',0) as IXMLCarrierType;
 kariyer.CarrierLabel:='DENEME LABELI';
 ClientDataSet1.IndexName:='ClientDataSet1Index1' ;
  clientdataset1.DisableControls;
  ClientDataset1.First;

 repeat
  mindex:=ClientDataSet1GTIN.Value + ClientDataSet1BN.Value + ClientDataSet1XD.AsString;
 if mindex<>ymindex then
 begin
 urunlera:=anados.Carrier.Add;
 urunlera.GTIN:=ClientDataSet1GTIN.Value;
 urunlera.ExpirationDate:=ClientDataSet1XD.AsString;
 urunlera.LotNumber:=ClientDataSet1BN.Value;
 end;

 urunlera.Add(ClientDataSet1SN.Value);
 ClientDataset1.Next;
 ymindex:=mindex;

 until ClientDataset1.Eof;

 SaveDialog1.FilterIndex:=2;
  SaveDialog1.DefaultExt:='XML';
 if SaveDialog1.Execute then
      xmldcmnt1.SaveToFile(SaveDialog1.FileName);
 ClientDataSet1.IndexName:='' ;
 clientdataset1.EnableControls;
 //clientdataset1.Refresh;
 StatusBar2.Panels[1].Text:='İşlem tamamlandı';
 ShowMessage('XML dosyanız oluşturuldu'+#13+#10+savedialog1.FileName);
end;


Cevapla