İlginizi Çekebilir
  1. Ana Sayfa
  2. SQL

T-SQL İle XML Okumak – Read XML With T-SQL

T-SQL İle XML Okumak – Read XML With T-SQL
+ - 0

T-SQL İle XML Okumak – Read XML With T-SQL yazım ile farklı farklı içeriklere devam ediyorum. Bu yazımda size son zamanlarda sürekli gördüğümüz elektronik belgelerden birisi olan satış e-irsaliyesindeki bilgileri okuyacağız. Yalnız burada tek bir irsaliye değil toplu irsaliyedir ve bu toplu e-irsaliye SAP yazılımından alınmıştır.

Bu okuma yöntemi de SAP için özel değildir. Bu yazının amacı T-SQL ile XML okuma yöntemidir.

NOT: Bu okuduğumuz dosya XML dosyasıdır. Tekli e-fatura, e-irsaliye gibi içerisinde tasarımlarını da içeren dosyalar değillerdir. Bunu netleştirmek istiyorum.

T-SQL İle XML Okumak – Read XML With T-SQL

SAP’den alınan bir satış irsaliye listesi var elimde ancak bu dosyayı maalesef paylaşamayacağım. Ancak burada dosyanın içerisindeki tagları (etiketleri) paylaşabilirim. Normal şartlarda xml dosyaları serialize ve deserialize işlemleri çevirebiliyoruz ancak bazı durumlarda bunu yapamıyoruz. En azından ben elimdeki dosya için bunu yapamadım. Bu sebeple farklı okuma yöntemleri denedim. Daha öncleri zaten bir çok farklı yöntemle denemiştim ancak her seferinde farklı şeyler denemiştim.

Bu yöntemi bulmadan önceki işimde biraz dar zamanım vardı ve daha hızlı bir çözüm bulmam gerekiyordu. Biraz araştırma yaparak, T-SQL ile okunabildiğini fark ettim. biraz uğraştım ve sonunda istediğimi çözebildim.

Buradan github paylaşımıma gidebilirsiniz. Şimdi anlatıma geçelim.

 

T-SQL Kullanarak XML Okumak

Burada maalesef kodları çok fazla açıklayamayacağım Kodları görelim.

Kodlarımıza biraz bakalım.

DECLARE @Xml TABLE ( Data XML );
INSERT INTO @Xml ( Data ) SELECT * FROM OPENROWSET(BULK N'C:\xmls\SALES_DISPATCHES.xml', SINGLE_BLOB) O;

SELECT  DISPATCH.[Row].value('TYPE[1]', 'NVARCHAR(50)') AS [TYPE] ,
        DISPATCH.[Row].value('NUMBER[1]', 'NVARCHAR(50)') AS NUMBER ,
        DISPATCH.[Row].value('DATE[1]', 'NVARCHAR(50)') AS DATE ,
        DISPATCH.[Row].value('DOC_NUMBER[1]', 'NVARCHAR(50)') AS DOC_NUMBER ,
        DISPATCH.[Row].value('ARP_CODE[1]', 'NVARCHAR(50)') AS ARP_CODE ,

                [TRANSACTION].[Row].value('TYPE[1]', 'NVARCHAR(50)') AS [T_TYPE] ,
		[TRANSACTION].[Row].value('MASTER_CODE[1]', 'NVARCHAR(50)') AS MASTER_CODE ,
		[TRANSACTION].[Row].value('QUANTITY[1]', 'NVARCHAR(50)') AS QUANTITY ,
		[TRANSACTION].[Row].value('UNIT_CODE[1]', 'NVARCHAR(50)') AS UNIT_CODE ,
		[TRANSACTION].[Row].value('UNIT_CONV1[1]', 'NVARCHAR(50)') AS UNIT_CONV1 ,
		[TRANSACTION].[Row].value('VAT_INCLUDED[1]', 'NVARCHAR(50)') AS VAT_INCLUDED ,
		[TRANSACTION].[Row].value('VAT_RATE[1]', 'NVARCHAR(50)') AS VAT_RATE 

FROM    @Xml X
        CROSS APPLY X.Data.nodes('/SALES_DISPATCHES/DISPATCH') DISPATCH ( [Row] )
        CROSS APPLY DISPATCH.[Row].nodes('TRANSACTIONS/TRANSACTION') [TRANSACTION] ( [Row] )

SALES_DISPATCHES root node’dur. DISPATCH ise child node’dur.

SALES_DISPATCHES = Satış İrsaliyeleri

DISPATCH = İrsaliye

TRANSACTIONS = Satış İrsaliye Kalemleri

TRANSACTION = Satış İrsaliye Kalemi

Yani şöyle bir durum var.

SALES_DISPATCHES > DISPATCH > TRANSACTIONS > TRANSACTION – her bir node diğerinin altında yer alıyor. Örnek bir düzen vereyim.

  • SALES_DISPATCHES (Satış İrsaliyeleri)
    • DISPATCH (İrsaliye)
    • TRANSACTIONS (İrsaliye Kalemleri)
      • TRANSACTION (İrsaliye Kalemi)
      • TRANSACTION (İrsaliye Kalemi)
    • TRANSACTIONS
    • DISPATCH
    • DISPATCH
    • TRANSACTIONS
      • TRANSACTION
      • TRANSACTION
      • TRANSACTION
      • TRANSACTION
    • TRANSACTIONS
    • DISPATCH
    • DISPATCH
    • TRANSACTIONS
      • TRANSACTION
      • TRANSACTION
      • TRANSACTION
    • TRANSACTIONS
    • DISPATCH
  • SALES_DISPATCHES

Kodlarda gördüğünüz Type, Numbe, Date gibi ifadeler ise verileri tutan sütunlarımızı temsil etmektedir.

Kodlarda gördüğünüz gibi değişken olarak tablo tanımladık ve xml’i olduğu gibi içe aktardık. Sonrasında bu tablo üzerinde bir select çalıştırıyoruz. From kısmına geldiğimizde DISPATCH ve TRANSACTION arasındaki bağlantıyı göstermek için CROSS APPLY kullanıyoruz. 

Örnek çıktının nasıl göründüğünü github ‘da paylaştığım dosyada görebilirsiniz. Sizde kendi xml dosyalarınızı okuyabilmek için biraz uğraşarak çözebilirsiniz.


T-SQL İle XML Okumak – Read XML With T-SQL yazımda bu kadar arkadaşlar.  Diğer derslerimizde görüşmek üzere.

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.  Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Ayrıca bu projenin Github Sayfasına bağlantıya tıklayarak ulaşabilirsiniz.

Arkadaşlar ayrıca Telegram kanalıma abone olabilir ve yeni yazılardan anında haberdar olabilirisiniz.  Discord’a katılmayı unutmayın.

Sağlıcakla ve kodla kalın….

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)