A.6 XPath

XPath is a W3C standard (http://www.w3.org/TR/xpath) for locating portions of an XML document that match a set of criteria. Use XPath to find the names of all the people in your XML address book who live in New York, all URLs for articles written on PHP in a Meerkat RSS feed, or the most recent entry into your XML-based content management system.

Think of XPath as SQL for XML documents. You can do all kinds of advanced queries using XPath, such as finding items with a certain parent, attribute, or location in the tree. XPath uses the same syntax as XSLT, so you might be familiar with parts of it, even if you're not an XPath expert.

There are two parts to an XPath query: the portion of the XML document you wish to retrieve and the restrictions you want to place upon your query. This is analogous to SQL SELECT and WHERE clauses.

For example, you can search the XML address book in Example A-1 for all the email addresses:


Levels in an XML document are separated by a /, similar to the separators for folders in a directory path. When the query begins with a slash, it tells XPath to start looking at the top-level element. Therefore, /address-book/person/email means gather all the email elements under a person element under an address-book element.

This is like a SQL SELECT without a WHERE. However, if you're planning a trip to Manhattan and just want to find all your friends who live in New York, NY, use this:

/address-book/person[city = "New York" and state = "NY"]/email

The text inside square brackets refines the XPath query. [city = "New York" and state = "NY"] restricts the search to entries where the city element under person is New York and the state is NY.

To check attributes instead of elements, prepend an @:

/address-book/person[@id = "1"]

This finds all persons with an id attribute of 1.

A good book on XPath is John E. Simpson's XPath and XPointer (O'Reilly). John's article "Top Ten Tips to Using XPath and XPointer" is posted on XML.com at http://www.xml.com/pub/a/2002/08/14/xpath_tips.html. Additionally, Chapter 9 of XML in a Nutshell covers XPath and is available online at http://www.oreilly.com/catalog/xmlnut2/chapter/ch09.pdf.