LINQ to XML in silverLight 3.0

No.of Views947
Bookmarked0 times
Downloads 
Votes0
By  Dhananjay Kumar   On  16 Apr 2010 10:04:50
Tag : LINQ , Miscellaneous
how to use LINQ to XML to read data from a XML file and bind that to SILVERLIGHT 3.0 Data Grid. XML file will be read in a WCF service and WCF service will return a List to be bind in a Grid.
emailbookmarkadd commentsprint

Images in this article missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at info@codegain.com

 

Objective


This article will explain how to use LINQ to XML to read data from a XML file and bind that to SILVERLIGHT 3.0 Data Grid.  XML file will be read in a WCF service and WCF service will return a List to be bind in a Grid.
 

Step 1

 Create a SILVERLIGHT application.  Select hosting in WEB Application project option.

 

Image Loading

Step 2: Add XML file in Web project.

 If you have any existing XML file add that by selecting Add Existing Item option by right clicking on WEB (SilverLightApplication1.Web) project  else select add new item option and select XML file from DATA tab. Copy paste the below XML file in your newly created XML file.  Give any name of your choice to XML file. Name I am giving is Books.Xml.
Your XML file in Web Application project must look like.


Books.XML

<?xml version="1.0"?>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
    <description>
      An in-depth look at creating applications
      with XML.
    </description>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
    <description>
      A former architect battles corporate zombies,
      an evil sorceress, and her own childhood to become queen
      of the world.
    </description>
  </book>
  <book id="bk103">
    <author>Corets, Eva</author>
    <title>Maeve Ascendant</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-11-17</publish_date>
    <description>
      After the collapse of a nanotechnology
      society in England, the young survivors lay the
      foundation for a new society.
    </description>
  </book>
  <book id="bk104">
    <author>Corets, Eva</author>
    <title>Oberon's Legacy</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2001-03-10</publish_date>
    <description>
      In post-apocalypse England, the mysterious
      agent known only as Oberon helps to create a new life
      for the inhabitants of London. Sequel to Maeve
      Ascendant.
    </description>
  </book>
  <book id="bk105">
    <author>Corets, Eva</author>
    <title>The Sundered Grail</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2001-09-10</publish_date>
    <description>
      The two daughters of Maeve, half-sisters,
      battle one another for control of England. Sequel to
      Oberon's Legacy.
    </description>
  </book>
  <book id="bk106">
    <author>Randall, Cynthia</author>
    <title>Lover Birds</title>
    <genre>Romance</genre>
    <price>4.95</price>
    <publish_date>2000-09-02</publish_date>
    <description>
      When Carla meets Paul at an ornithology
      conference, tempers fly as feathers get ruffled.
    </description>
  </book>
  <book id="bk107">
    <author>Thurman, Paula</author>
    <title>Splish Splash</title>
    <genre>Romance</genre>
    <price>4.95</price>
    <publish_date>2000-11-02</publish_date>
    <description>
      A deep sea diver finds true love twenty
      thousand leagues beneath the sea.
    </description>
  </book>
  <book id="bk108">
    <author>Knorr, Stefan</author>
    <title>Creepy Crawlies</title>
    <genre>Horror</genre>
    <price>4.95</price>
    <publish_date>2000-12-06</publish_date>
    <description>
      An anthology of horror stories about roaches,
      centipedes, scorpions  and other insects.
    </description>
  </book>
  <book id="bk109">
    <author>Kress, Peter</author>
    <title>Paradox Lost</title>
    <genre>Science Fiction</genre>
    <price>6.95</price>
    <publish_date>2000-11-02</publish_date>
    <description>
      After an inadvertant trip through a Heisenberg
      Uncertainty Device, James Salway discovers the problems
      of being quantum.
    </description>
  </book>
  <book id="bk110">
    <author>O'Brien, Tim</author>
    <title>Microsoft .NET: The Programming Bible</title>
    <genre>Computer</genre>
    <price>36.95</price>
    <publish_date>2000-12-09</publish_date>
    <description>
      Microsoft's .NET initiative is explored in
      detail in this deep programmer's reference.
    </description>
  </book>
  <book id="bk111">
    <author>O'Brien, Tim</author>
    <title>MSXML3: A Comprehensive Guide</title>
    <genre>Computer</genre>
    <price>36.95</price>
    <publish_date>2000-12-01</publish_date>
    <description>
      The Microsoft MSXML3 parser is covered in
      detail, with attention to XML DOM interfaces, XSLT processing,
      SAX and more.
    </description>
  </book>
  <book id="bk112">
    <author>Galos, Mike</author>
    <title>Visual Studio 7: A Comprehensive Guide</title>
    <genre>Computer</genre>
    <price>49.95</price>
    <publish_date>2001-04-16</publish_date>
    <description>
      Microsoft Visual Studio 7 is explored in depth,
      looking at how Visual Basic, Visual C++, C#, and ASP+ are
      integrated into a comprehensive development
      environment.
    </description>
  </book>
</catalog>

Step 2: Creating WCF service

Right click on Web Project and add WCF service from Web tab. Give any name of your choice, I am giving name here MyService.
 

Image Loading

Creating Data Contract

This class will get serialized at client side.

[DataContract]
    public class BooksDTO
    {

     [DataMember]
        public string Id { get; set; }
     [DataMember]
        public string Author { get; set; }
     [DataMember]
        public string Title { get; set; }
     [DataMember]
        public string Genere { get; set; }
     [DataMember]
        public string Price { get; set; }
     [DataMember]
        public string PublishDate { get; set; }
     [DataMember]
        public string Description { get; set; }

 }

Creating Service Contract

IMyService.cs

namespace SilverlightApplication1.Web
{
    .
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        List<BooksDTO> GetBookDetails();
        
    }
}

Creating Service Implementation

MyService.svc.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; 
using System.Web; 
using System.Xml.Linq; 

namespace SilverlightApplication1.Web
{

    public class MyService : IMyService
    {
        public List<BooksDTO> GetBookDetails()
        {

           
            XDocument  xmlDocument  = XDocument.Load(@"c:\\Books.XML");
           var books = from r in xmlDocument.Descendants("book")
                                   select new BooksDTO 
                                   {
                                       
                                       Author = r.Element("author").Value,
                                       Title = r.Element("title").Value,
                                       Genere = r.Element("genre").Value,
                                       Price = r.Element("price").Value,
                                       PublishDate = r.Element("publish_date").Value,
                                       Description = r.Element("description").Value,

                                   };
           return books.ToList();
            
        }
    }
}

Few points

1.    Using namespace System,.XML.Linq  to use LINQ to XML features.
2.    Load method of XDocument class is being used to load XML document.
3.    Searching for all the descendents in XML document for the element Book. And retrieving all the child elements value.
4.    Service is returning List of BooksDTO class.
Compile the web project and after successfully compilation right click on service and view in browser.
 

Step 3: Consuming in SILVERLIGHT client

1.    Add Service Reference.
2.    While adding service reference, select advanced tab and change return type from Array to List.
3.    Add Data Grid on XAML. Give any name. I am giving name here MyGrid.
4.    On page load simply bind the result returning from service to Data Grid.
5.    Make sure your startup project is SilverLightApplication1.Web and startup page is SilverLightApplicatio1Testpage.aspx . Else you might yield with Cross domain problem.

MainPage.Xaml

<UserControl xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="SilverlightApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">
        <my:DataGrid x:Name="myGrid" AutoGenerateColumns="True" Background="Azure" ></my:DataGrid>         
    </Grid>
</UserControl>

MainPage.Xaml.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using SilverlightApplication1.ServiceReference1; 

namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            MyServiceClient proxy = new MyServiceClient();
            proxy.GetBookDetailsCompleted += new EventHandler<GetBookDetailsCompletedEventArgs>(proxy_GetBookDetailsCompleted);
            proxy.GetBookDetailsAsync();
        }

        void proxy_GetBookDetailsCompleted(object sender, GetBookDetailsCompletedEventArgs e)
        {

            myGrid.ItemsSource = e.Result; 
        }
    }
}

Sample Output

Image Loading
 
Sign Up to vote for this article
 
About Author
 
Dhananjay Kumar
Occupation-Software Engineer
Company-Infosys Technolgies,Pune
Member Type-Gold
Location-India
Joined date-20 Jul 2009
Home Page-http://dhananjaykumar.net/
Blog Page-http://dhananjaykumar.net/
Dhananjay Kumar is Microsoft MVP on connected system. He blogs at http://dhananjaykumar.net/ . You can follow him http://twitter.com/debugmode_/ and reach him at dhananjay.25july@gmail.com
 
 
Other popularSectionarticles
    I was working on the project using LINQ. I got the requirement to join the two entity on multiple column.
    Published Date : 02/Oct/2011
    I have found three more new operators in Linq which is use full in day to day programming stuff. Take,Skip and Reverse. Here are explanation of operators how it works.
    Published Date : 21/Jun/2010
    Projection helps us developer to retrieve desired result from the collection . LINQ provides two projection operator. Select and SelectMany. Select works with one collection whereas SelectMany works with more than one collection
    Published Date : 20/Aug/2010
    In this article, I will give explanation on XElement class. This class is used to construct XML Elements.
    Published Date : 17/Apr/2010
    In this article, I will give explanation on XAttribute class. This class is used to construct Attributes in XML Elements.
    Published Date : 17/Apr/2010
Comments
There is no comments for this articles.
Leave a Reply
Title:
Display Name:
Email:
(not display in page for the security purphase)
Website:
Message:
Please refresh your screen using Ctrl+F5
If you can't read this number refresh your screen
Please input the anti-spam code that you can read in the image.
^ Scroll to Top