This post will explain how you could parse remotely located XML feeds and display content in Windows Phone 8 app. Here’s an sample XML file which we plan to fetch and display as a list in our app. If you are not familiar with XMLs then you could refer to some basic tutorials on w3schools.com. Here are few things worth remembering..
- With XML, your data can be available to all kinds of reading machines
- You can define any tag in XML, taking care of the fact that each tag opened should be closed
- You can have any level of nesting of tags in XML
- XML tags are case sensitive
- In XML, all elements must be properly nested within each other
- XML documents must contain one element that is the parent of all other elements.
- In XML, the attribute values must always be quoted.
If you have a database on some server, you can easily create a web service for it and use the web service to get content for your app. This is useful when you already have things setup for your website and want to take it to mobile with native apps. Also if you have an app on one platform its easier to develop it for another using the same web services. It keeps your data synced and frees you from worrying about data inconsistency.
Here’s the PHP code which I used to generate the sample XML file. I fetch the rows from MySQL database and echo it within properly nested tags. You could pass GET/POST requests to filter the data which you want to return. For example, you may choose to display only authors with count greater than 20.
Now lets jump into building the app.
Step 1. Add a class Author to store the data for an author
In this tutorial we are fetching all the authors from a XML file. So we name our class Author which will store an author’s data.
Step 2. Add a list `authors` which will have items of type Author
Below the class
Author add a list
authors to store all the authors details
Step 3. Call a webclient on LayoutRoot_Loaded event to fetch the XML file
Add a loaded event handler for MainPage.xaml‘s LayoutRoot and add the code below to make a call to a WebClient and fetch the XML file.
- We create a new instance of
- Invoke its
OpenReadAsyncfunction and specify the URL for your XML file
client_OpenReadCompletedwhen the XML file at the specified URL has been downloaded
client_OpenReadCompletedhas the code to parse the XML
Step 4. Parse the XML and store the data in the list `authors`
We earlier created a list `authors` to store the details of all the authors. We will use it now while parsing the XML.
- The downloaded stream
e.Resultis stored in a
- Next we create an instance of
XDocumentclass and load the stream str in it and name it
- We then iterate through all the descendants of the node
- For each author we create a new instance of our class
Authorand add the values to it
- We then add this
Authorobject to our list `authors`
- Finally we set the
ListBoxto the list `authors`
authorlistbox.ItemsSource = authors;
Step 5. Create a Listbox to display all the authors using XAML
This ListBox will display the names of all the authors fetched from the XML file
- We define the data template of the
- We bind the
name. It is the same name which we used in our class
- Give the
ListBoxsome name, here we use
That’s all you need to do. Try deploying the app in the emulator and see how it works.
Suppose you have the XML stored locally in your app. Then you could use the following code to parse and display it.
Now that you have successfully displayed the content in a list box, lets try showing the count on
ListBox_Selection_Changed. Most of the tutorials skipped this and I used to get struck here 😛
Get the full project source code here
Download full project source code XML-Parsing.zip