Consider you have to extract XML based information from a given URL and display it on the web page. This is really useful if you do not want to use iframes and have to customised the appearance of the final output.
Assume we have agreed that the information will look like something as shown in XML below:
<?xml version="1.0" encoding="UTF-8"?> <list> <item1>some item 1</item1> <item2>some item 2</item2> </list>
And some information provider is feeding this information from a URL
http://www.samplelist.com/list
Here is how to go about extracting and displaying it.
Step 1: Create a Literal control on the .aspx or .ascx file and set the ‘Text’ property as the URL and ‘Visible’ property as false
<asp:Literal ID="LiteralURLTrackerAddress" Text="http://www.samplelist.com/getlist" Visible="false" runat="server"></asp:Literal>
You can also add it to web.config if the same URL is used else where in the site and reference it, but please do not hard code it.
Step 2: Add two more Literal controls for each of the list items as below:
<asp:Literal ID="LiteralItem1" runat="server"></asp:Literal> <asp:Literal ID="LiteralItem2" runat="server"></asp:Literal>
As they are literal controls, you can add any CSS around these controls and set the appearance.
Step 3: In the code behind file, .aspx.cs or .ascx.cs, add the following code in Page_Load() or OnLoad() function
Step 4: First we need to create a Request object from the Literal’s text that we set up in step 1
//create HTTP request string URLToSend = LiteralURLTrackerAddress.Text.ToString(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URLToSend.ToString()); request.Method = "GET"; request.KeepAlive = true;
Step5: Get a response from the request object
// Get response for http web request
HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
Step 6: Read the response in StreamReader
if (webResponse != null) { //Xml response read from a stream; StreamReader responseStream = new StreamReader(webResponse.GetResponseStream()); //get the response string webResponseStream = responseStream.ReadToEnd();
Step 7: As we have agreed that it will be XML format, parse the response to XML
//parse it into XML
XmlDocument listXML= new XmlDocument(); listXML.LoadXml(webResponseStream);
Step 8: Read the individual nodes, your code logic may be different from here onwards and will depend upon your own XML schema.
string baseNode = @"list/"; //basenode //actual nodes XmlNode item1 = listXML.SelectSingleNode(baseNode + "item1"); XmlNode item2 = listXML.SelectSingleNode(baseNode + "item2");
Step 9: Assign them to the Literals
//assign them back LiteralItem1.Text = item1.InnerText.ToString(); LiteralItem2.Text = item2.InnerText.ToString();
Compile and remove any errors.
Add a try / catch block around the code to make it more robust.