Quick Tip: Using XPath to find nodes by attribute value

There are some things that I can just remember: phone numbers, locker combinations, and the like.  There are others that I have to lookup again and again and again.  XPath query syntax is one of the latter items.  Today, I'd like to talk a little about XPath queries.

The following XML contains a collection of "Friend" nodes.  Each node has attributes for name and birth date.  To keep this post to a reasonable length, I am going to limit the XML to 5 nodes.

<MyFriends>  <Friend name="Sam" birthMonth="July" birthDay="16" birthYear="1974" />  <Friend name="Pam" birthMonth="April" birthDay="7" birthYear="1967" />  <Friend name="George" birthMonth="February" birthDay="2" birthYear="1981" />  <Friend name="John" birthMonth="April" birthDay="11" birthYear="1972" />  <Friend name="Martha" birthMonth="August" birthDay="3" birthYear="1974" /></MyFriends>

After loading this XML into an XmlDocument, I can use XPath to query for the nodes of interest.

Since April is coming soon, I would like to get a list of my friends who has a birthday that month.  To do so, I query for Friend nodes where the value of the birthMonth attribute is "April".

// load the xml file into an XmlDocumentXmlDocument doc = new XmlDocument();doc.Load("myfriends.xml");XmlElement rootNode = doc.DocumentElement;// select the friends who have a birthday in AprilString query = "Friend[@birthMonth='April']";XmlNodeList friends = rootNode.SelectNodes(query);foreach(XmlElement friend in friends){    // TODO: display a reminder to buy a birthday card}

When the above snippet is run, two friends are returned: Pam and John.  The application can retrieve the desired information from the node and display an appropriate reminder.

-- DK

Edit: Fix grammar

This posting is provided "AS IS" with no warranties, and confers no rights.