Querying XML Files Using XPATH in ASP.NET



Sometimes we need to access certain parts of an XML file; this concept can be done using a special language known as XPath. This article basically will help you to know about XPath and how to query an XML file so that we can read only certain parts of it.

Before proceding with the design part, add a new XML file to your ASP.Net web application and add the following contents to it.

<?xml version="1.0"?>
<catalog>
          <
cd category="Pop">
                   <title>Empire Burlesque</title>
                   <artist>Bob Dylan</artist>
                   <country>USA</country>
                   <company>Columbia</company>
                   <price>10.90</price>
                   <year>1985</year>
          </cd>
          <
cd category="Pop">
                   <title>Hide your heart</title>
                   <artist>Bonnie Tyler</artist>
                   <country>UK</country>
                   <company>CBS Records</company>
                   <price>9.90</price>
                   <year>1988</year>
          </cd>
          <
cd category="Rock">
                   <title>Greatest Hits</title>
                   <artist>Dolly Parton</artist>
                   <country>USA</country>
                   <company>RCA</company>
                   <price>9.90</price>
                   <year>1982</year>
          </cd>
          <
cd category="Rock">
                   <title>Still got the blues</title>
                   <artist>Gary Moore</artist>
                   <country>UK</country>
                   <company>Virgin records</company>
                   <price>10.20</price>
                   <year>1990</year>
          </cd>
          <
cd category="Classic">
                   <title>Eros</title>
                   <artist>Eros Ramazzotti</artist>
                   <country>EU</country>
                   <company>BMG</company>
                   <price>9.90</price>
                   <year>1997</year>
          </cd>
          <
cd category="Rock">
                   <title>One night only</title>
                   <artist>Bee Gees</artist>
                   <country>UK</country>
                   <company>Polydor</company>
                   <price>10.90</price>
                   <year>1998</year>
          </cd>
          <
cd category="Classic">
                   <title>Sylvias Mother</title>
                   <artist>Dr.Hook</artist>
                   <country>UK</country>
                   <company>CBS</company>
                   <price>8.10</price>
                   <year>1973</year>
          </cd>
          <
cd category="DJ">
                   <title>Maggie May</title>
                   <artist>Rod Stewart</artist>
                   <country>UK</country>
                   <company>Pickwick</company>
                   <price>8.50</price>
                   <year>1990</year>
          </cd>
          <
cd category="DJ">
                   <title>Romanza</title>
                   <artist>Andrea Bocelli</artist>
                   <country>EU</country>
                   <company>Polydor</company>
                   <price>10.80</price>
                   <year>1996</year>
          </cd>
          <
cd category="Pop">
                   <title>When a man loves a woman</title>
                   <artist>Percy Sledge</artist>
                   <country>USA</country>
                   <company>Atlantic</company>
                   <price>8.70</price>
                   <year>1987</year>
          </cd>
          <
cd category="Classic">
                   <title>Black angel</title>
                   <artist>Savage Rose</artist>
                   <country>EU</country>
                   <company>Mega</company>
                   <price>10.90</price>
                   <year>1995</year>
          </cd>
          <
cd category="DJ">
                   <title>1999 Grammy Nominees</title>
                   <artist>Many</artist>
                   <country>USA</country>
                   <company>Grammy</company>
                   <price>10.20</price>
                   <year>1999</year>
          </cd>
          <
cd category="Rap">
                   <title>For the good times</title>
                   <artist>Kenny Rogers</artist>
                   <country>UK</country>
                   <company>Mucik Master</company>
                   <price>8.70</price>
                   <year>1995</year>
          </cd>
          <
cd category="Rap">
                   <title>Big Willie style</title>
                   <artist>Will Smith</artist>
                   <country>USA</country>
                   <company>Columbia</company>
                   <price>9.90</price>
                   <year>1997</year>
          </cd>
          <
cd category="Pop">
                   <title>Tupelo Honey</title>
                   <artist>Van Morrison</artist>
                   <country>UK</country>
                   <company>Polydor</company>
                   <price>8.20</price>
                   <year>1971</year>
          </cd>
          <
cd category="Pop">
                   <title>Soulsville</title>
                   <artist>Jorn Hoel</artist>
                   <country>Norway</country>
                   <company>WEA</company>
                   <price>7.90</price>
                   <year>1996</year>
          </cd>
          <
cd category="Rock">
                   <title>The very best of</title>
                   <artist>Cat Stevens</artist>
                   <country>UK</country>
                   <company>Island</company>
                   <price>8.90</price>
                   <year>1990</year>
          </cd>
          <
cd category="Pop">
                   <title>Stop</title>
                   <artist>Sam Brown</artist>
                   <country>UK</country>
                   <company>A and M</company>
                   <price>8.90</price>
                   <year>1988</year>
          </cd>
          <
cd category="DJ">
                   <title>Bridge of Spies</title>
                   <artist>T`Pau</artist>
                   <country>UK</country>
                   <company>Siren</company>
                   <price>7.90</price>
                   <year>1987</year>
          </cd>
          <
cd category="Pop">
                   <title>Private Dancer</title>
                   <artist>Tina Turner</artist>
                   <country>UK</country>
                   <company>Capitol</company>
                   <price>8.90</price>
                   <year>1983</year>
          </cd>
          <
cd category="Pop">
                   <title>Midt om natten</title>
                   <artist>Kim Larsen</artist>
                   <country>EU</country>
                   <company>Medley</company>
                   <price>7.80</price>
                   <year>1983</year>
          </cd>
          <
cd category="Pop">
                   <title>Pavarotti Gala Concert</title>
                   <artist>Luciano Pavarotti</artist>
                   <country>UK</country>
                   <company>DECCA</company>
                   <price>9.90</price>
                   <year>1991</year>
          </cd>
          <
cd category="Pop">
                   <title>The dock of the bay</title>
                   <artist>Otis Redding</artist>
                   <country>USA</country>
                   <company>Atlantic</company>
                   <price>7.90</price>
                   <year>1987</year>
          </cd>
          <
cd category="Pop">
                   <title>Picture book</title>
                   <artist>Simply Red</artist>
                   <country>EU</country>
                   <company>Elektra</company>
                   <price>7.20</price>
                   <year>1985</year>
          </cd>
          <
cd category="Remix">
                   <title>Red</title>
                   <artist>The Communards</artist>
                   <country>UK</country>
                   <company>London</company>
                   <price>7.80</price>
                   <year>1987</year>
          </cd>
          <
cd category="Remix">
                   <title>Unchain my heart</title>
                   <artist>Joe Cocker</artist>
                   <country>USA</country>
                   <company>EMI</company>
                   <price>8.20</price>
                   <year>1987</year>
          </cd>
</
catalog>

I've created the following design for doing the application.

Querying XML Files by using XPATH

In the Button click event the RunQuery() method should be called to execute the query ed in the textbox which is an HTML input text box. The following is the source code for that.

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title
>
<script language="javascript" type="text/javascript">
var xmlDoc;
    try
    {
//I've added the xml file in mydata folder so to load the file we need //to use the following
command.
        xmlDoc=new ActiveXObject("Msxml2.DOMDocument.6.0");
        xmlDoc.async=false;
        xmlDoc.load("./mydata/Catalog.xml");
//If you have directly added the xml file to your application then //type the following command
//xmlDoc.load("Catalog.xml")
    }
    catch(e)
    {
        alert(e);
    }
    function RunQuery()
   {
         var s="";
         var i;
        var query=document.f1.t1.value;
        alert(query);
        var nodes=xmlDoc.selectNodes(query);
        s+="<br/><b>"+nodes[0].nodeName+"</b><br/><hr/>";

        for(i=0;i<nodes.length;i++)
        {
            s+="<Li>"+nodes[i].childNodes[0].nodeValue+"<Li><br/>";
        }
        document.getElementById("msg").innerHTML=s;
   } 
</script>
</
head>
<
body>
    <form id="f1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Names="Times New Roman"
            Font-Size="X-Large" Text="Enter Your Query : "></asp:Label>&nbsp;
        <input id="t1" style="width: 291px" type="text" /><br />
        <br />
        <input id="Button1" type="button" value="Run" onClick="RunQuery()" /></div>
        <div id="msg">
        <div>
    </form
>
</body>
</
html>

Now just run the application and type the query in textbox.

To search an element from the XML file type the following command:

Syntax: - //elementname

E.g.: - //title
E.g.: - //country

Querying XML Files by using XPATH

Querying XML Files by using XPATH

To search by category which is an Attribute of CD element type the following command in the textbox:-
//@category

Hope you've liked the application. Until the next time, Enjoy programming.


Similar Articles