Fitur VB9 (LINQ to XML dan XML Literal)

Halo ini adalah posting kesebelas saya tentang fitur dari VB9 tentang XML Literal. Ini adalah fitur dari VB9 yang "cool", pada VB9 XML menjadi "first class citizen" yang berarti anda dapat menuliskan XML secara Literal.

anda dapat melihat posting saya sebelumnya:

 

Pada jaman dahulu kala (VB8) untuk membuat file XML anda harus menggunakan System.Xml untuk DOM manipulation, contoh kodenya:

   1: Imports System.IO
   2: Imports System.Xml
   3: Module Module1
   4:     Sub Main()
   5:         Using fs As New FileStream("produksample.xml", FileMode.Create)
   6:             Using wt As XmlWriter = XmlWriter.Create(fs)
   7:                 wt.WriteStartDocument()
   8:                 wt.WriteStartElement("Products")
   9:                 wt.WriteStartElement("Product")
  10:                 wt.WriteAttributeString("Id", "KB001")
  11:                 wt.WriteElementString("Name", "Laptop Acer")
  12:                 wt.WriteElementString("Price", "7000000")
  13:                 wt.WriteEndElement()
  14:                 wt.Flush()
  15:             End Using
  16:         End Using
  17:     End Sub
  18: End Module

kode diatas akan menghasilkan file "produksample.xml" sebagai berikut:

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <Products>
   3:     <Product Id="KB001">
   4:     <Name>Laptop Acer</Name>
   5:     <Price>7000000</Price>
   6:     </Product>
   7: </Products>

LINQ to XML

Pada VB9 (.NET 3.5) anda dapat menuliskannya dengan cara yang baru. VB9 mendukung XElement class yang terdapat pada namespace System.Xml.Linq, dengan menggunakan cara penulisan ini code untuk pembuatan dokumen XML tampak menjadi lebih "clean". Class yang ada pada System.Xml.Linq adalah

Class Deskripsi
XAttribute Merepresentasikan attribut yang dibuat
XDocument Merepresentasikan Complete XML Tree
XElement Merepresentasikan XML Element, dan sebagai dasar untuk mengkonstruksi XML Tree
XName Merepresentasikan attribut dan element names
XNode Merepresentasikan base class dari XML Node

Untuk membuat dokumen xml seperti contoh sebelumnya dengan menggunakan XElement anda dapat menuliskan kode berikut:

   1: Imports System.Xml.Linq
   2: Module ContohXElement
   3:     Sub Main()
   4:         Dim xmlProd = New XElement("Products", _
   5:                           New XElement("Product", _
   6:                               New XAttribute("Id", "KB001"), _
   7:                               New XElement("Name", "Laptop Acer"), _
   8:                               New XElement("Price", "7000000")))
   9:         xmlProd.Save("xelementProd.xml")
  10:     End Sub
  11: End Module

XML Literal

VB9 juga menawarkan cara yang lebih simple dan clean selain menggunakan XElement yaitu XML Literal, saat ini XML Literal hanya disupport oleh VB9, C# 3.0 belum menssuport fitur ini (C# 4.0? Maybe ^_^). dengan XML Literal anda dapat menuliskan kode berikut:

   1: Imports System.Xml.Linq
   2: Module ContohXElement
   3:     Sub Main()
   4:         Dim xmlProd = <Products>
   5:                           <Product Id="KB001">
   6:                               <Name>Laptop Acer</Name>
   7:                               <Price>7000000</Price>
   8:                           </Product>
   9:                       </Products>
  10:         xmlProd.Save("literalprod.xml")
  11:     End Sub
  12: End Module

Anda juga dapat mengambil nilai dari attribute atau elemen dalam dokumen tersebut dengan iterasi

   1: Dim xmlProd = <Products>
   2:                   <Product Id="KB001">
   3:                       <Name>Laptop Acer</Name>
   4:                       <Price>7000000</Price>
   5:                   </Product>
   6:                   <Product Id="KB002">
   7:                       <Name>Laptop Toshiba</Name>
   8:                       <Price>9000000</Price>
   9:                   </Product>
  10:               </Products>
  11: For Each produk In xmlProd.<Product>
  12:     Console.WriteLine("Id {0}, Nama {1} dan harganya Rp.{2}", _
  13:                       produk.@Id, _
  14:                       produk.<Name>.Value, _
  15:                       produk.<Price>.Value)
  16: Next

Hasilnya:

image 

Mudah ya? ^_^ jika kita perhatikan ketika anda melakukan iterasi dokumen xml diatas, VS 2008 sudah cukup memberikan intellisense

image

namun intellisense tersebut tidak dapat menampilkan keterangan nama elemen atau attribut yang ada pada dokumen XML yang anda buat, karena IDE tidak memiliki informasi tentang XML Schema anda, untuk menyelesaikan masalah ini anda dapat mengimports xml shema dari dokumen. Caranya tambahkan XML Schema, cara yang paling mudah adalah dengan menggunakan fitur pada VS 2008.

Tambahkan file xml yang sudah anda buat sebelumnya kedalam project, kemudian buka dengan VS, pilih "Create Schema". Copykan hasil schema yang digenerate kedalam clipboard.

image

Tambahkan file XML Schema pada project, dan beri nama "ProdShema.xsd".

image

Kemudian copykan hasil schema yang digenerate pada langkah sebelumnya kedalam file "ProdShema.xsd", jangan lupa untuk mengisi atribut "targetNamespace"

image

Setelah itu kembali ke kode, dan anda dapat mengimports schema yang sudah anda buat.

image

Dengan begitu ketika anda mengetikan kode maka bantuan intellisense akan lebih jelas karena dapat mengenali schema dari dokumen anda

image

wow programming xml dokumen jadi asik klo ada intellisense gini ^_^

Embedded Expression

Anda juga dapat menambahkan embedded expression dalam XML Literal, jika anda pernah menggunakan ASP.NET pasti familiar dengan cara penulisan embedded expression menggunakan keyword <%= %>. Contoh penggunaannya.

   1: Imports System.Xml.Linq
   2: Module EmbeddedExpression
   3:     Sub Main()
   4:         Dim mahasiswa() = {New With {.Nim = "23082321", .Nama = "Erick", .Ipk = 3.5}, _
   5:                      New With {.Nim = "23082322", .Nama = "Bejo", .Ipk = 3.2}, _
   6:                      New With {.Nim = "23082323", .Nama = "Anton", .Ipk = 3.3}}
   7:         Dim xmlStudent = <Students>
   8:                              <%= From mhs In mahasiswa _
   9:                                  Select _
  10:                                  <Student Nim=<%= mhs.Nim %>>
  11:                                      <Nama><%= mhs.Nama %></Nama>
  12:                                      <Ipk><%= mhs.Ipk %></Ipk>
  13:                                  </Student> _
  14:                              %>
  15:                          </Students>
  16:         xmlStudent.Save("students.xml")
  17:         Console.WriteLine(xmlStudent.ToString())
  18:     End Sub
  19: End Module

jika dijalankan programnya akan menampilkan

image

Pada kode diatas kita menggenerate dokumen xml menggunakan nilai yang diambil dari anonymous types yang sudah kita buat sebelumnya, anda juga dapat menggenerate dokumen XML dengan data yang anda ambil dari database, dll. Embedded Expression juga dapat digunakan untuk menggenerate "VB View" secara dinamis pada ASP.NET MVC.

Selamat mencoba XML Literal dari VB9  ^_^

Published Wednesday, April 15, 2009 12:15 AM by Erick Kurniawan
Filed under: ,
Powered by Community Server (Commercial Edition), by Telligent Systems