in Web and Tech

MSXML, XML DOM, XPath, etc.

XML DOM Methods
http://msdn.microsoft.com/en-us/library/ms757828.aspx

XPATH
(from eggheadcafe.com) some XPath snippets. neat.

Here are a few little XPath snippets of how to query for a specific node or node list in an XML document looking for specific attribute values.

Sample Code:

sXML string equals the following




Mr. Jones
Mr. Johnson


<% Dim oXMLDoc Dim oXMLNode Dim oXMLNodeList Set oXMLDoc = Server.CreateObject("MSXML2.DOMDocument.4.0") oXMLDoc.LoadXML(sXML) Set oXMLNode = oXMLDoc.selectSingleNode("//EXAMPLE/CUSTOMER[@id='2' or @type='C']") ' oXMLNode.Text will show "Mr Johnson" Set oXMLNode = oXMLDoc.selectSingleNode("//EXAMPLE/CUSTOMER[@id='1' and @type='B']") ' oXMLNode.Text will show "Mr Jones" ' oXMLNode.Attributes.getNamedItem("id").Text will show "1" ' oXMLNode.Attributes.getNamedItem("type").Text will show "B" ' Select a node list where id equals 1 and the type equals B or C. ' In our example, only Mr. Jones will be returned. Set oXMLNodeList = oXMLDoc.selectNodes("//EXAMPLE/CUSTOMER[@id='1' and (@type='B' or @type='C')]") ' oXMLNode.Text will show "Mr Jones" ' Select a node with a specific text value Set oXMLNode = oXMLDoc.selectSingleNode("//EXAMPLE/CUSTOMER[. ='Mr. Johnson']") ' oXMLNode.Text will show "Mr. Johnson" ' Select node list of all nodes with CUSTOMER not equal to "EggHeadCafe" oXMLNodeList.selectNodes("//EXAMPLE/CUSTOMER[. !='EggHeadCafe']") ' Start of MSXML4 or higher features. If you want to use MSXML3, then ' you'll need to set the following: oXMLDoc.setProperty "SelectionLanguage", "XPath" ' Search for a substring in an attribute Set oXMLNode = oXMLDoc.selectSingleNode("//EXAMPLE/CUSTOMER[substring(@type,1,2) ='DE']") ' Search for a substring in a node value Set oXMLNode = oXMLDoc.selectSingleNode("//EXAMPLE/CUSTOMER[substring(.,1,3) ='Mr.']") ' Search for a value contained in an attribute Set oXMLNode = oXMLDoc.selectSingleNode("//EXAMPLE/CUSTOMER[contains(@type,'DECEA')]") ' Search for a contained in a node value Set oXMLNode = oXMLDoc.selectSingleNode("//EXAMPLE/CUSTOMER[contains(.,'Smith')]") ' Search only from root of selected node. This examples 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 XPath query ' would return all CUSTOMER nodes in the entire document even though ' they may be above or below the current node. Set oNode = oXMLDoc.selectSingleNode("//EXAMPLE") Set oXMLTreeList = oNode.selectNodes(".//CUSTOMER") nTot = oXMLTreeList.length - 1 For nCnt = 0 to nTot Set oXMLNode = oXMLTreeList.nextNode() msgbox oXMLNode.Attributes.getNamedItem("id").Text Next ' End of MSXML4 or higher features Set oXMLNode = nothing Set oXMLDoc = nothing %>

http://www.eggheadcafe.com/articles/20030627d.asp

Write a Comment

Comment