XPath Query Node, Attribute, and Substring

XPath query examples and code syntax of how to use selectSingleNode to query by node text value or attribute value including substrings. Learn how to use and/or conditional arguments in xpath queries. Use selectNodes to get a node list in an XML document or XPathNavigator looking for specific attribute values.

The object model shown here is for the COM xml parser. If you are using .NET's XmlDocument or XPathNavigator class instead of MSXML2.DOMDocument.4.0, the xpath query syntax is the same. In fact, much of the object model is the same.

example "xml" string equals the following:

<?xml version='1.0'?>
<CUSTOMER id="1" type="B">Mr. Jones</CUSTOMER>
<CUSTOMER id="2" type="C">Mr. Johnson</CUSTOMER>


Dim doc
Dim node
Dim nodeList

Set doc = Server.CreateObject("MSXML2.DOMDocument.4.0")


Set node = doc.selectSingleNode("//EXAMPLE/CUSTOMER[@id='2' or @type='C']")

' node.Text will show "Mr Johnson" in this xpath query on attributes

Set node = doc.selectSingleNode("//EXAMPLE/CUSTOMER[@id='1' and @type='B']")

' node.Text will show "Mr Jones"
' node.Attributes.getNamedItem("id").Text will show "1"
' node.Attributes.getNamedItem("type").Text will show "B"

' Example for selecting a node list where the id attribute equals 1 and the type equals B or C.
' Only Mr. Jones will be returned.

Set nodeList = doc.selectNodes("//EXAMPLE/CUSTOMER[@id='1' and (@type='B' or @type='C')]")

' node.Text will show "Mr Jones"

' xpath query example for selecting a node with a specific text value

Set node = doc.selectSingleNode("//EXAMPLE/CUSTOMER[. ='Mr. Johnson']")

' node.Text will show "Mr. Johnson"

' Example for selecting a node list of all nodes with CUSTOMER not equal to "NullSkull"

nodeList.selectNodes("//EXAMPLE/CUSTOMER[. !='NullSkull']")

' Start of MSXML4 or higher features. If you want to use MSXML3, then
' you'll need to set the following:

doc.setProperty "SelectionLanguage", "XPath"

' Example for searching for a substring in an attribute

Set node = doc.selectSingleNode("//EXAMPLE/CUSTOMER[substring(@type,1,2) ='DE']")

' XPath substring syntax example for searching in a node value

Set node = doc.selectSingleNode("//EXAMPLE/CUSTOMER[substring(.,1,3) ='Mr.']")

' Example for searching node attribute values

Set node = doc.selectSingleNode("//EXAMPLE/CUSTOMER[contains(@type,'DECEA')]")

' Search for a contained in a node value

Set node = doc.selectSingleNode("//EXAMPLE/CUSTOMER[contains(.,'Smith')]")

' Search only from root of selected node. This example gets a list of nodes
' from a specific node not the whole XML document. This XML document
' is too small to be a reasonable example but you get the idea.
' The ".//" tells the parser to make the current node the "root" node of the
' document for this specific XPath query. Without the ".", the query
' would return all CUSTOMER nodes in the entire document even though
' they may be above or below the current node.

Set node = doc.selectSingleNode("//EXAMPLE")

Set treeList = node.selectNodes(".//CUSTOMER")

nTot = treeList.length - 1

For nCnt = 0 to nTot

Set node = treeList.nextNode()
msgbox node.Attributes.getNamedItem("id").Text


' End of MSXML4 or higher features

Set node = nothing
Set doc = nothing


By Robbe Morris   Popularity  (61970 Views)
Biography - Robbe Morris
Robbe has been a Microsoft MVP in C# since 2004. He is also the co-founder of NullSkull.com which provides .NET articles, book reviews, software reviews, and software download and purchase advice.  Robbe also loves to scuba dive and go deep sea fishing in the Florida Keys or off the coast of Daytona Beach. Microsoft MVP
Here's my most recent course on Pluralsight. I think it has some interesting insight on IT professional job interviews and using words in your resume to influence the questions you'll be asked. Resumes, Job Seeking, and Interviews in context.