Yorumları: 683
Konuları: 75
Kayıt Tarihi: 24-01-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 926 Acemi
25-11-2020, Saat: 18:33
(Son Düzenleme: 25-11-2020, Saat: 18:45, Düzenleyen: Bay_Y.)
Merhabalar ;
Örnek XML Dosya
DECLARE @sSQL NVARCHAR(MAX)
DECLARE @Parametre NVARCHAR(500)
DECLARE @xml XML
SET @Parametre = N'@XML_OUT XML OUTPUT'
SET @sSQL = N'SELECT @XML_OUT = BulkColumn FROM OPENROWSET(BULK ' + quotename(@xmldosyaadi, '''') + ', SINGLE_BLOB) ROW_SET';
EXEC sp_executesql @sSQL , @Parametre, @XML_OUT = @xml OUTPUT;
Declare @hDoc AS INT
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
INSERT INTO YS_tmp_customer (Id, MessageId, RestaurantName, RestaurantCatalog, RestaurantCategory, CustomerName, CustomerId, CustomerType, PaymentNote, OrderTotal, CustomerPhone, CustomerPhone2, PromoCode, City, Region, Organization, Adress, AddressDescription, AddressId, PaymentMethodId, DeliveryTime, ChangeInTotal, Currency, OrderNote )
SELECT * FROM OPENXML(@hDoc, 'order')
WITH
(
Id bigint '@Id',
MessageId bigint '@MessageId ',
RestaurantName varchar(100) '@RestaurantName',
RestaurantCatalog varchar(30) '@RestaurantCatalog',
RestaurantCategory varchar(50) '@RestaurantCategory',
CustomerName varchar(100) '@CustomerName' ,
CustomerId int '@CustomerId',
CustomerType smallint '@CustomerType',
PaymentNote nvarchar(100) '@PaymentNote',
OrderTotal float '@OrderTotal',
CustomerPhone nvarchar(30) '@CustomerPhone',
CustomerPhone2 nvarchar(30) '@CustomerPhone2',
PromoCode nvarchar(50) '@PromoCode',
City nvarchar(30) '@City',
Region nvarchar(30) '@Region',
Organization nvarchar(50) '@Organization',
Adress nvarchar(150) '@Address',
AddressDescription nvarchar(50) '@AddressDescription',
AddressId nvarchar(50) '@AddressId',
PaymentMethodId smallint '@PaymentMethodId',
DeliveryTime datetime '@DeliveryTime',
ChangeInTotal float '@ChangeInTotal',
Currency nvarchar(6) '@Currency',
OrderNote nvarchar(200) '@OrderNote'
)
SQL içinden dosyayı okuduğumda sorun yaşamadan dosyayı okuyabiliyorum. Fakat delphi içinden bir türlü pars edemedim.
Sitede Standart XML dosyaları ile ilgili örnekler var fakat XMl dosyam çok standartlara uymadığından
bir türlü beceremedim. Bu konuda yardımlarınızı rica ediyorum.
Herkese sağlıklı ve mutlu günler diliyorum.
Yorumları: 1.902
Konuları: 23
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 21.290 Üstad
25-11-2020, Saat: 21:05
(Son Düzenleme: 25-11-2020, Saat: 22:35, Düzenleyen: mrmarman.)
Merhaba.
* XML'yi inceledim.
* TEXT olarak eklenen (order) ve içeriğindeki ürünler (product) tablosunu yeni bir XMLDocument olarak ele alırsanız sonuç alabilirsiniz.
Örneğin :
aXMLDocument := TXMLDocument.Create(nil);
aXMLDocument.ParseOptions := aXMLDocument.ParseOptions+[poPreserveWhiteSpace];
try
aXMLDocument.XML.Clear;
aXMLDocument.LoadFromXML( xXML );
if aXMLDocument.ChildNodes.Count > 0 then
begin
aProject := aXMLDocument.ChildNodes.First; // 01 // <?xml version="1.0" encoding="utf-8"?>
aProject := aProject.NextSibling; // 02 // <soap:Envelope
aProject := aProject.ChildNodes.First; // <soap:Body>
aProject := aProject.ChildNodes.First; // <GetMessageResponse
aProject := aProject.ChildNodes.First; // <GetMessageResult>
aNode := aProject.ChildNodes.First; // !! <Order XML> !!
if ( aNode <> nil ) and (aNode.NodeType = ntText) then
begin // Product Pane
aOrderXML := TXMLDocument.Create(nil);
aOrderXML.ParseOptions := aOrderXML.ParseOptions+[poPreserveWhiteSpace];
aOrderXML.LoadFromXML( aNode.Text );
aOrder := aOrderXML.ChildNodes.First; // Order
// Order
...
...
...
...
Saygılarımla
Muharrem ARMAN
Yorumları: 683
Konuları: 75
Kayıt Tarihi: 24-01-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 926 Acemi
25-11-2020, Saat: 21:42
(Son Düzenleme: 25-11-2020, Saat: 21:50, Düzenleyen: Bay_Y.)
İlgi ve alakanız için çok teşekkür ederim ,
Çok sağolıun.
Örnek projeyi veya kodu kasıtlı olarak mı paylaşmadınız.
Yorumları: 1.902
Konuları: 23
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 21.290 Üstad
Merhaba.
- Kod paylaşımı konusundaki sorunuz için yazıyorum : Cevabım "evet" çala-kalem hazırlanmış, başka bir projeme monte edilmiş bir kod olduğundan terbiyesi için zaman ayırmam gerekliydi. Buna şu an zaman ayırmak istemedim.
- Kurduğunuz yapı size özel bir yapı olduğundan başlığı inceleyen başkalarının aynı yapıyı kullanmayacağını değerlendirerek, kişiye özel bir kod olarak değerlendirdim. Yanılmıyorum değil mi ?
- Ek olarak zaten bu işlemi yaptığınızı, sadece bu konuda takıldığınızı belirmişsiniz, dolayısıyla ben de takıldığınız yere odaklandım.
- Bu verdiğim kod bloğu zaten kodun temeli. Yani gerisi FindNode('Id') vb ile bulup değeri okumak. Zaten bu aşamaya kadar gelmişsiniz. Kodun tamamı sizi hazırcılığa teşvik demektir.
- Şimdi bu aşamada çalışın, eğer hala sonuç alamazsanız bildirin kodu düzenleyip paylaşacağım söz.
Saygılarımla
Muharrem ARMAN
Yorumları: 683
Konuları: 75
Kayıt Tarihi: 24-01-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 926 Acemi
25-11-2020, Saat: 22:15
(Son Düzenleme: 25-11-2020, Saat: 22:16, Düzenleyen: Bay_Y.)
Teşekkür ederim yine de zaman ayırıp cevap yazmışsınız. Sorun olmayacaksa var kısmındaki tanım ve tipleri paylaşır mısınız ?
Yorumları: 1.902
Konuları: 23
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 21.290 Üstad
25-11-2020, Saat: 22:27
(Son Düzenleme: 25-11-2020, Saat: 22:36, Düzenleyen: mrmarman.)
Merhaba.
* Kodun Tamamı ( şimdi bitirdim) Terbiyesi tamam
Uses Xml.XMLIntf, Xml.XMLDoc;
function OrderList( xXML : String ): boolean;
Type
tOrder = Record
Id, MessageId, RestaurantName, RestaurantCatalog, RestaurantCategory, CustomerName, CustomerId, CustomerType, PaymentNote, OrderTotal, CustomerPhone, CustomerPhone2, PromoCode, City, Region, Organization, Address, AddressDescription, AddressId, PaymentMethodId, DeliveryTime, ChangeInTotal, Currency, OrderNote : String;
end;
Type
tProduct = record
id, Name, Price, ListPrice, Quantity, Options, OptionIds, OrderIndex, ParentIndex, PromoParentIndex, ProductOptionId : String;
end;
var
aXMLDocument,
aOrderXML : IXMLDocument;
aProject,
aNode,
aOrder,
aProduct : IXMLNode;
xOrder : tOrder;
xProduct : TProduct;
begin
Result := False;
aXMLDocument := TXMLDocument.Create(nil);
aXMLDocument.ParseOptions := aXMLDocument.ParseOptions+[poPreserveWhiteSpace];
try
aXMLDocument.XML.Clear;
aXMLDocument.LoadFromXML( xXML );
if aXMLDocument.ChildNodes.Count > 0 then
begin
aProject := aXMLDocument.ChildNodes.First; // 01 // <?xml version="1.0" encoding="utf-8"?>
aProject := aProject.NextSibling; // 02 // <soap:Envelope
aProject := aProject.ChildNodes.First; // <soap:Body>
aProject := aProject.ChildNodes.First; // <GetMessageResponse
aProject := aProject.ChildNodes.First; // <GetMessageResult>
aNode := aProject.ChildNodes.First; // !! <Order XML> !!
if ( aNode <> nil ) and (aNode.NodeType = ntText) then
begin // Product Pane
aOrderXML := TXMLDocument.Create(nil);
aOrderXML.ParseOptions := aOrderXML.ParseOptions+[poPreserveWhiteSpace];
aOrderXML.LoadFromXML( aNode.Text );
aOrder := aOrderXML.ChildNodes.First; // Order
// Order
xOrder := Default(tOrder); // Empty Record
xOrder.Id := aOrder.AttributeNodes.FindNode('Id').Text;
xOrder.MessageId := aOrder.AttributeNodes.FindNode('MessageId').Text;
xOrder.RestaurantName := aOrder.AttributeNodes.FindNode('RestaurantName').Text;
xOrder.RestaurantCatalog := aOrder.AttributeNodes.FindNode('RestaurantCatalog').Text;
xOrder.RestaurantCategory := aOrder.AttributeNodes.FindNode('RestaurantCategory').Text;
xOrder.CustomerName := aOrder.AttributeNodes.FindNode('CustomerName').Text;
xOrder.CustomerId := aOrder.AttributeNodes.FindNode('CustomerId').Text;
xOrder.CustomerType := aOrder.AttributeNodes.FindNode('CustomerType').Text;
xOrder.PaymentNote := aOrder.AttributeNodes.FindNode('PaymentNote').Text;
xOrder.OrderTotal := aOrder.AttributeNodes.FindNode('OrderTotal').Text;
xOrder.CustomerPhone := aOrder.AttributeNodes.FindNode('CustomerPhone').Text;
xOrder.CustomerPhone2 := aOrder.AttributeNodes.FindNode('CustomerPhone2').Text;
xOrder.PromoCode := aOrder.AttributeNodes.FindNode('PromoCode').Text;
xOrder.City := aOrder.AttributeNodes.FindNode('City').Text;
xOrder.Region := aOrder.AttributeNodes.FindNode('Region').Text;
xOrder.Organization := aOrder.AttributeNodes.FindNode('Organization').Text;
xOrder.Address := aOrder.AttributeNodes.FindNode('Address').Text;
xOrder.AddressDescription := aOrder.AttributeNodes.FindNode('AddressDescription').Text;
xOrder.AddressId := aOrder.AttributeNodes.FindNode('AddressId').Text;
xOrder.PaymentMethodId := aOrder.AttributeNodes.FindNode('PaymentMethodId').Text;
xOrder.DeliveryTime := aOrder.AttributeNodes.FindNode('DeliveryTime').Text;
xOrder.ChangeInTotal := aOrder.AttributeNodes.FindNode('ChangeInTotal').Text;
xOrder.Currency := aOrder.AttributeNodes.FindNode('Currency').Text;
xOrder.OrderNote := aOrder.AttributeNodes.FindNode('OrderNote').Text;
//...
//...
Showmessage( 'Restaurant Name : ' + UTF8ToWideString( RawByteString( xOrder.RestaurantName ) ) );
//...
//...
// Ordered Products
aProduct := aOrder.ChildNodes.First;
while aProduct <> nil do begin
xProduct := Default(tProduct); // Empty Record
xProduct.id := aProduct.AttributeNodes.FindNode('id').Text;
xProduct.Name := aProduct.AttributeNodes.FindNode('Name').Text;
xProduct.Price := aProduct.AttributeNodes.FindNode('Price').Text;
xProduct.ListPrice := aProduct.AttributeNodes.FindNode('ListPrice').Text;
xProduct.Quantity := aProduct.AttributeNodes.FindNode('Quantity').Text;
xProduct.Options := aProduct.AttributeNodes.FindNode('Options').Text;
xProduct.OptionIds := aProduct.AttributeNodes.FindNode('OptionIds').Text;
xProduct.OrderIndex := aProduct.AttributeNodes.FindNode('OrderIndex').Text;
xProduct.ParentIndex := aProduct.AttributeNodes.FindNode('ParentIndex').Text;
xProduct.PromoParentIndex := aProduct.AttributeNodes.FindNode('PromoParentIndex').Text;
xProduct.ProductOptionId := aProduct.AttributeNodes.FindNode('ProductOptionId').Text;
//...
//...
Showmessage( 'Product Name and Price : ' + UTF8ToWideString( RawByteString( xProduct.Name + ' ' + xProduct.Price ) ) );
//...
//...
aProduct := aProduct.NextSibling;
end;
end;
Result := True;
end else begin
Showmessage( 'There is no child node exists... ');
end;
except
on E: Exception do
WriteLn(E.ClassName + ':' + E.Message)
end;
end;
Temsili Kullanımı
procedure TForm1.Button1Click(Sender: TObject);
begin
With TStringList.Create do try
LoadFromFile( ExtractfilePath(ParamStr(0)) + 'siparis.xml' );
if OrderList( Text )
then Showmessage( '*** Operation Success' )
else Showmessage( '*** Operation FAILED !!!' );
finally
Free;
end;
end;
XML Kodu içeriği
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetMessageResponse xmlns="http://tempuri.org/"><GetMessageResult><order Id="961645620" MessageId="150504963" RestaurantName="(test1)" RestaurantCatalog="test" RestaurantCategory="11111" CustomerName="Murat Pala" CustomerId="16434227" CustomerType="3" PaymentNote="Nakit (Nakit ödeme) - Lütfen fiş getiriniz." OrderTotal="34.00" CustomerPhone="216 000 00 00" CustomerPhone2="" PromoCode="" City="postakip" Region="Ortaköy" Organization="" Address="Ortaköy caddesi no:1" AddressDescription="Akbank üstü" AddressId="23fbc5531ba990e" PaymentMethodId="1" DeliveryTime="2020.11.24 17:45" ChangeInTotal="0.00" Currency="YSM" OrderNote=""><product id="5196" Name="Kıymalı Pide" Price="34.00" ListPrice="34.00" Quantity="1" Options="" OptionIds="" OrderIndex="1" ParentIndex="0" PromoParentIndex="0" ProductOptionId="" /><product id="f5a8" Name="Sütlaç" Price="0.00" ListPrice="0.00" Quantity="1" Options="" OptionIds="" OrderIndex="2" ParentIndex="1" PromoParentIndex="0" ProductOptionId="43578" /><product id="39775" Name="Coca-Cola Light (33 cl.)" Price="0.00" ListPrice="0.00" Quantity="1" Options="" OptionIds="" OrderIndex="3" ParentIndex="1" PromoParentIndex="0" ProductOptionId="21970973399eeb4" /></order></GetMessageResult></GetMessageResponse></soap:Body></soap:Envelope>
Saygılarımla
Muharrem ARMAN
Yorumları: 683
Konuları: 75
Kayıt Tarihi: 24-01-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 926 Acemi
26-11-2020, Saat: 00:03
(Son Düzenleme: 26-11-2020, Saat: 09:40, Düzenleyen: Bay_Y.)
 evet terbiyesi tamam olmuş. Uğraşırdım sizi hakkınızı helal edin. Allah gönlünüze göre versin. Herşey gönlünüzce olsun. Sağlıklı sıhhatli bir ömür nasip etsin rabbim size ve hepimize.
Çok teşekkür ediyorum tekrar.
|