This article demonstrates how to :
- Send xml data to the web client, and
- Filter records from xml at client side by using XPath expression.
- Populate all products of selected category into product drop-down.
Send xml data to web client:
In aspx file, insert an xml tag and define its id. Now inside this xml tag embed asp.net xml control which will hold xml data returned from the server.
<xml id="xmldata">
<asp:xml id="xmlProduct" runat="server" EnableViewState="False"></asp:xml>
</xml>
In code behind aspx.vb file, create an XMLDocument object and then LoadXml from GetXML() method of dataset. The XmlDocument provides an xml document according to the W3C Core DOM Level 1 and Core DOM Level 2 standards.
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(_dsProduct.GetXml());
Assign xdoc object to document property of asp:xml control.
xmlProduct.Document = xdoc;
Well asp:xml control(xmlProduct) is ready to use at client side.
XML at client side :
<Products>
<categoryid>8</categoryid>
<productid>37</productid>
<productname>Gravad lax</productname>
</Products>
<Products>
<categoryid>8</categoryid>
<productid>10</productid>
<productname>Ikura</productname>
</Products>
<Products>
<categoryid>8</categoryid>
<productid>36</productid>
<productname>Inlagd Sill</productname>
</Products>
<Products>
<categoryid>8</categoryid>
<productid>41</productid>
<productname>Jack's New England Clam Chowder</productname>
</Products>
<Products>
<categoryid>8</categoryid>
<productid>13</productid>
<productname>Konbu</productname>
</Products>
<Products>
<categoryid>8</categoryid>
<productid>30</productid>
<productname>Nord-Ost Matjeshering</productname>
</Products>
<Products>
<categoryid>8</categoryid>
<productid>73</productid>
<productname>Röd Kaviar</productname>
</Products>
<Products>
<categoryid>8</categoryid>
<productid>45</productid>
<productname>Rogede sild</productname>
</Products>
<Products>
<categoryid>8</categoryid>
<productid>46</productid>
<productname>Spegesild</productname>
</Products>
Filter records from xml data at client side by using XPath expression:
XPath : An XPath expression uses a path notation, like those used in URLs, for addressing parts of an XML document. The expression is evaluated to yield an object of the node-set, Boolean, number, or string type.
XPath Expressions :
Example 1 : "//Products[categoryid='8']" refers to all elements of categoryid 8.
Example 2 : "//Products[categoryid='8']/productid refers to all elements of ProductId of categoryid 8.
Note : The double forward slash (//) is a path operator, indicates a search that can include zero or more levels of hierarchy.
var products = xmldoc.selectNodes("//Products[categoryid='8']");
Here, products contains a collection of all elements belongs to category id 8 returned by selectNodes() method of xmlDocument object.
selectNodes() : Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as IXMLDOMNodeList ( i.e. the collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection). The IXMLDOMNodeList supports iteration through the live collection, in addition to indexed access.
IXMLDOMNodeList members :
- properties
length : Read only property indicates the number of items in the collection.
- Methods
item() : Allows random access to individual nodes within the collection.
nextNode() : Returns the next node in the collection.
reset() : Resets the iterator.
Populate product drop-down list with all products of categoryid 8 :
var option = null;
// iterate products collection to get productId and productName
for ( var i =0 ; i < products.length ; i++)
{
//create an option element
option = document.createElement("OPTION");
// specify value and text for option element
// in products nodesList childNodes(0) refers to CategoryId
//childNodes(1) to ProductId, and
//childNodes(2) to ProductName.
// text property represents the text content of the node.
option.value = products.item(i).childNodes(1).text; // childNodes(1)
option.text = products.item(i).childNodes(2).text;
// add option element to product drop-down list.
this.cmbProducts.add(option);
}
Stored Procedure [ GetAllProducts ] : Northwind database of SQL Server
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE GetAllProducts
AS
-------- Get Category List -------------------
select categoryid, categoryname
from categories
order by categoryname
-------- Get Product List ------------------------------
select categoryid,productid,productname
from products
order by productname
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Reference: MSDN January 2006