Loading an XML file in your Silverlight project into memory - Raj Kaimal

Loading an XML file in your Silverlight project into memory

Version : Silverlight 2 Beta 2

Reading an XML file in an XAP package can easily be done with the help of a helper class like so:

   1: public static class XmlHelper
   2: {
   3:     public static XElement LoadDocument(string fileName)
   4:     {
   5:         //No longer required in Silverlight 2 since
   6:         //XmlXapResolver has been added as the default resolver for XmlReader
   7:         //ref: http://msdn.microsoft.com/en-us/library/cc189007(vs.95).aspx
   8:         //XmlReaderSettings settings = new XmlReaderSettings();
   9:         //settings.XmlResolver = new XmlXapResolver();
  10:         //XmlReader reader = XmlReader.Create(fileName, settings);
  11:  
  12:         XmlReader reader = XmlReader.Create(fileName);
  13:         XElement element = XElement.Load(reader);
  14:         return element;
  15:     }
  16: }

Once you have the XElement object, you are free to manipulate it with LINQ to XML as shown below:

   1: public static List<Slide> LoadSlides()
   2: {
   3:     XElement element = XmlHelper.LoadDocument("Slides.xml");
   4:     var slides = from slide in element.Descendants("Slide")
   5:                  select new Slide {
   6:                     Title = (string)slide.Element("Title"),
   7:                     Text = (string)slide.Element("Text"),
   8:                     Image = (string)slide.Element("Image"),
   9:                  };
  10:     return slides.ToList();
  11: }

The method above returns a List<Slide> where the Slide class is defined like so:

   1: public class Slide
   2: {
   3:     public string Title { get; set; }
   4:     public string Text { get; set; }
   5:     public string Image { get; set; }
   6: }

and the contents of the XML file we are reading is:

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <Slides>
   3:   <Slide>
   4:     <Title>Slide 1</Title>
   5:     <Text>Slide 1 Description</Text>
   6:     <Image>Slide1.jpg</Image>
   7:   </Slide>
   8:   <Slide>
   9:     <Title>Slide 2</Title>
  10:     <Text>Slide 2 Description</Text>
  11:     <Image>Slide2.jpg</Image>
  12:   </Slide>
  13: </Slides>

Note that the XML file should have its BuildAction set to "Content".

Published Tuesday, July 08, 2008 1:36 AM by rajbk
Filed under: , , ,

Comments

# re: Loading an XML file in your Silverlight project into memory

Do you need to pass the XmlReaderSettings into the XmlReader constructor?

Tuesday, July 08, 2008 11:30 AM by Dan Goldstein

# re: Loading an XML file in your Silverlight project into memory

Dan,

Thanks for pointing that out.

On further reading the documentation, XmlXapResolver is no longer needed as of Silverlight 2. See comments in code.

raj

Tuesday, July 08, 2008 12:45 PM by rajbk

# re: Loading an XML file in your Silverlight project into memory

or:

XElement element = XElement.Load("Slides.xml");

Wednesday, October 01, 2008 7:58 AM by David

Leave a Comment

(required) 
(required) 
(optional)
(required)