Creating XML File With XML Literal and LINQ in VB 9.0

Posted at : Jan/01/2008
2918 Views | 2 Comments

I've been posted the articles about new XML Literal in the previous article. Now we can see how powerfull that feature when combined with LINQ using Query Expression Syntax for creating XML File...

Ya begitulah kira-kira preambule nya :) ...pada posting artikel kali ini saya akan membahas mengenai penggunaan LINQ dengan Query Expression Syntax nya untuk membuat file xml dengan xml literal...thanks again to XML Literal in VB 9.0 :))

Dengan adanya fitur XML Literal seakan-akan programmer VB diberikan kemudahan untuk membuat file xml...ya begitulah kira-kira..hal tersebut memang saya rasakan. Struktur hirarki yang kita buat dalam XML Literal begitu jelas terlihat.

Ok...pada kesempatan kali ini saya akan membuat contoh bagaimana kita dapat membuat file xml secara run time, dimana value dari elemen xml atau atribute nya diisi dengan menggunakan teknik LINQ berdasarkan Query Expression Syntax yang digunakan. Sumber data yang akan digunakan yaitu berasal dari tabel Products, Categories, dan Suppliers yang berada di dalam database Northwind. Sumber data tersebut akan di mapping dengan menggunakan LINQ to SQL Classes component yang akan menghasilkan DataContext class yang dapat kita sebut sebagai strongly typed database collection.

The first example i will to show you is how to create a simple xml file with LINQ...

Creating LINQ To SQL Classes.

Just right click your project > Add New Item > Choose Linq To SQL Classes..named your dblm file > Drag and Drop the tables from the Server Explorer window on to the OR Designer...see the OR Designer below

Creating a simple xml file

Buat sebuah project...whatever project template do you prefer :) ...i'm gonna using windows application form project template...tambahkan sebuah button control, buat event handler untuk event click sebagai berikut ( ahh...i'm gonna using relaxed delegate for its event handler :) ) :

   1:      Private Sub btnCreateLinqXml_Click() Handles btnCreateLinqXml.Click 
   2:          Dim northwindDb As New NorthwindDataContext
   3:   
   4:          Dim productsXML = <Products>
   5:                                <%= From products In northwindDb.Products _
   6:                                    Order By products.ProductName Ascending _
   7:                                    Select <Product>
   8:                                               <ID><%= products.ProductID %></ID>
   9:                                               <Name><%= products.ProductName %></Name>
  10:                                               <Stock><%= products.UnitsInStock %></Stock>
  11:                                               <Price><%= FormatCurrency(products.UnitPrice) %></Price>
  12:                                           </Product> %>
  13:                            </Products>
  14:   
  15:          productsXML.Save(CurDir() & "/products1.xml")
  16:          Process.Start(CurDir() & "/products1.xml")
  17:      End Sub

Query Expression Syntax di dalam xml literal harus diawali dengan sintak / simbol yang biasa kita lakukan di asp.net web form yaitu "<%= ... %>", anda dapat definisikan disini query nya. Elemen xml yang akan dibuat tinggal didefinisikan setelah perintah "Select"...setelah perintah ini anda dapat dengan bebas mendefinisikan nama elemen yang akan digunakan nantinya. Sintak "<%= ... %>" juga digunakan untuk memberikan teks / value diantara elemen yang telah didefinisikan...That's it...simple ehh :) Mari kita lihat ouput xml file bila di browse oleh browser :

Creating a Join query xml file

Lalu bagaimana caranya kalau kita ingin membuat sebuah file xml dimana datanya berasal dari beberapa tabel yang merupakan hasil join dan ditampilkan secara nested hierarchy? Jawabannya sama : it's simple :)  Yang perlu dilakukan adalah menambahkan klausa "From" didalam "Select" ..."From" tersebut digunakan untuk query data dari tabel lain yang mempunyai relationship dengan tabel sebelumnya.

Yang menarik adalah dukungan dari DataContext dalam membuat relationship secara otomatis didalam class tersebut. Jadi kalau didalam file .dbml tersebut kita tambahkan tabel Products dan Categories misalnya maka di masing-masing class tersebut terdapat sebuah Public Property yang merujuk ke tabel yang didefinisikan di dalam relationship. Mari kita lihat contoh kode nya :

   1:      Private Sub btnOneToManyXML_Click() Handles btnOneToManyXML.Click 
   2:          Dim northwindDb As New NorthwindDataContext
   3:   
   4:          Dim categoryProducts = <Categories>
   5:                                     <%= From cat In northwindDb.Categories _
   6:                                         Order By cat.CategoryName Ascending _
   7:                                         Select <Category>
   8:                                                    <Name><%= cat.CategoryName %></Name>
   9:                                                    <%= From prod In cat.Products _
  10:                                                        Where prod.CategoryID = cat.CategoryID _
  11:                                                        Select <Products>
  12:                                                                   <Name><%= prod.ProductName %></Name>
  13:                                                                   <Price><%= FormatCurrency(prod.UnitPrice) %></Price>
  14:                                                                   <Stock><%= FormatNumber(prod.UnitsInStock) %></Stock>
  15:                                                               </Products> %>
  16:   
  17:                                                </Category> %>
  18:                                 </Categories>
  19:   
  20:          categoryProducts.Save(CurDir() & "/categoriesProducts.xml")
  21:          Process.Start(CurDir() & "/categoriesProducts.xml")
  22:      End Sub

Perhatikan kode pada line-9...klausa From yang kedua digunakan untuk query data dari tabel Products berdasarkan relationship dari tabel Categories pada kolom CategoryID. Selanjutnya tinggal definiskan elemen yang akan ditampilkan dari tabel Products pada Select yang kedua.  Berikut adalah web browser preview :

Creating xml file with attribute mapping

Pada contoh sebelumnya file xml yang dihasilkan dibuat dengan menggunakan elemen-elemen sebagai mapping kolom yang ada di table dengan struktur xml filenya. Contoh berikutnya saya akan membuat file xml dengan mapping type column berupa attribute. Bagaimana caranya? mudah...mari kita lihat code di bawah ini :

   1:      Private Sub btnOneToManyAttr_Click() Handles btnOneToManyAttr.Click 
   2:          Dim northwindDb As New NorthwindDataContext
   3:   
   4:          Dim categoryProducts = <Categories>
   5:                                     <%= From cat In northwindDb.Categories _
   6:                                         Order By cat.CategoryName Ascending _
   7:                                         Select <Category Name=<%= cat.CategoryName %>>
   8:                                                    <%= From prod In cat.Products _
   9:                                                        Where prod.CategoryID = cat.CategoryID _
  10:                                                        Select <Products>
  11:                                                                   <Name><%= prod.ProductName %></Name>
  12:                                                                   <Price><%= FormatCurrency(prod.UnitPrice) %></Price>
  13:                                                                   <Stock><%= FormatNumber(prod.UnitsInStock) %></Stock>
  14:                                                               </Products> %>
  15:                                                </Category> %>
  16:                                 </Categories>
  17:   
  18:          categoryProducts.Save(CurDir() & "/categoriesProductsAtt.xml")
  19:          Process.Start(CurDir() & "/categoriesProductsAtt.xml")
  20:      End Sub

Seperti yang dapat anda lihat untuk membuat sebuah atribut kita tinggal definisikan saja didalam elemen yang akan digunakan. Untuk assign value pada atribut terebut sama seperti yang dilakukan terhadap elemen (No double quotes required for sorrounding its value!!). Hasil web previewnya seperti dibawah ini :

Creating xml file with more Join

Pada contoh diatas kita sudah lihat bagaimana caranya membuat file xml dengan data yang berasal dari join dua tabel. Lalu bagaimana kalau join tabelnya melibatkan lebih dari dua tabel? Prinsipnya sama saja...just add From clause in the inner Select query...Saya akan extend contoh diatas. File xml yang akan dihasilkan berikutnya merupakan query dari tabel Categories dimana tiap-tiap CategoryName berisi data Products yang termasuk ke dalam category tersebut dan tiap-tiap data Products akan berisi informasi berupa data Supplier nya. Let's see the code :

   1:      Private Sub btnAnotherNestedXML_Click() Handles btnAnotherNestedXML.Click 
   2:          Dim northwindDb As New NorthwindDataContext
   3:   
   4:          Dim categoryProducts = <Categories>
   5:                                     <%= From cat In northwindDb.Categories _
   6:                                         Order By cat.CategoryName Ascending _
   7:                                         Select <Category Name=<%= cat.CategoryName %>>
   8:                                                    <%= From prod In cat.Products _
   9:                                                        Where prod.CategoryID = cat.CategoryID _
  10:                                                        Select <Products>
  11:                                                                   <Name><%= prod.ProductName %></Name>
  12:                                                                   <Price><%= FormatCurrency(prod.UnitPrice) %></Price>
  13:                                                                   <Stock><%= FormatNumber(prod.UnitsInStock) %></Stock>
  14:                                                                   <%= From supplier In northwindDb.Suppliers _
  15:                                                                       Where supplier.SupplierID = prod.SupplierID _
  16:                                                                       Select <SupplierInfo>
  17:                                                                                  <Name><%= supplier.CompanyName %></Name>
  18:                                                                                  <Phone><%= supplier.Phone %></Phone>
  19:                                                                              </SupplierInfo> %>
  20:                                                               </Products> %>
  21:                                                </Category> %>
  22:                                 </Categories>
  23:   
  24:          categoryProducts.Save(CurDir() & "/categoriesProductsSupplier.xml")
  25:          Process.Start(CurDir() & "/categoriesProductsSupplier.xml")
  26:      End Sub

web browser preview :

Jadi kesimpulannya...tidak terbayangkan kalau fitur XML Literal itu tidak ada, kita mesti direpotkan bila menggunakan XMLWriter class yang harus tepat didalam menggunakan methodnya yang harus selalu berpasangan "WriteStart..." dan "WriteEnd...". Dan LINQ ini menyederhanakan teknik query pada sebuah object / class atau data domain lainnya. What next? I'll post the article about how to create HTML file and Excel file with XML Literal and LINQ...just stay tuned on the same channel :) 


[Comments]

Rahmat Faisal (Jan/02/2008 01:59:13)
Cool... Nice lesson...
Rully (Jan/02/2008 02:06:56)
Cool & nice feature on VB 9.0 :)

[Write your comment]

Name (required)

Email (required-will not published)

Comment
9023
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6984 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.