Represents the list of nodes that match a given XSL Pattern or XPath expression.
This interface inherits from IXMLDOMNodeList.
clone | Produces an exact copy of the current XMLDOMSelection object. |
matches | Checks whether the passed-in node is contained in the current collection. |
context | Specifies the node (subtree) to apply a selection. |
expr | Gets or puts the XPath or XSLPattern expression string. |
getProperty | Looks up a property by name. |
peekNode | Gets the next node that nextNode will return without advancing the line position. |
removeAll | Removes all the nodes from the current context that match the query. |
removeNext | Removes the next node that would be returned by peekNode or nextNode. |
A new XMLDOMSelection object is created via selectNodes on XMLDOMDocument2. The selectNodes method still returns an XMLDOMNodeList pointer, so in Visual Basic (and C++) you have to cast the result of selectNodes into an IXMLDOMSelection, as follows:
Dim Selection As IXMLDOMSelection Set Selection = xmldoc.selectNodes("//Customer[Zip =98072]")
The XMLDOMSelection object inherits the threading model of the document that created it.
This interface is an extension of the W3C DOM.
BOOL DOMSelectionDemo() { BOOL bResult = FALSE; short sResult = FALSE; IXMLDOMSelection *pIXMLDOMSelection=NULL; IXMLDOMNodeList *pIXMLDOMNodeList=NULL; IXMLDOMNode *pIXMLDOMNode=NULL; IXMLDOMDocument2 *pIXMLDOMDocument2=NULL; BSTR bstrValue; HRESULT hr; try { hr=CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_SERVER, IID_IXMLDOMDocument2, (LPVOID*)(&pIXMLDOMDocument2)); SUCCEEDED(hr) ? 0 : throw hr; if(pIXMLDOMDocument2) { hr=pIXMLDOMDocument2->put_async(VARIANT_FALSE); if(SUCCEEDED(hr)) { hr=pIXMLDOMDocument2->load(_variant_t( _T("d:\\inetpub\\wwwroot\\samplexmldtd.xml")), &sResult); if(SUCCEEDED(hr) && (sResult==VARIANT_TRUE)) { hr=pIXMLDOMDocument2->selectNodes( _T("*/BOOK[TITLE='Cosmos']"), &pIXMLDOMNodeList); if(SUCCEEDED(hr)) { hr=pIXMLDOMNodeList->QueryInterface(IID_IXMLDOMSelection ,(void**)&pIXMLDOMSelection ); if(SUCCEEDED(hr) && pIXMLDOMSelection) { LONG uLength; bResult=TRUE; hr=pIXMLDOMSelection->get_length(&uLength); if(SUCCEEDED(hr)) { for(int iIndex=0; iIndex < uLength; iIndex++) { // remove all the nodes from the list-display // them as they are removed. hr=pIXMLDOMSelection->removeNext( &pIXMLDOMNode); if(SUCCEEDED(hr) && pIXMLDOMNode) { hr=pIXMLDOMNode->get_text(&bstrValue); if(SUCCEEDED(hr)) ::MessageBox(NULL, bstrValue, _T("Node Text"), MB_OK); RELEASE(pIXMLDOMNode); } } } RELEASE(pIXMLDOMSelection); } RELEASE(pIXMLDOMNodeList); } } } RELEASE(pIXMLDOMDocument2); } } catch(...) { CHECK_AND_RELEASE(pIXMLDOMNode); CHECK_AND_RELEASE(pIXMLDOMDocument2); CHECK_AND_RELEASE(pIXMLDOMNodeList); CHECK_AND_RELEASE(pIXMLDOMSelection); DisplayErrorToUser(); } return bResult; }
d:\\inetpub\\wwwroot\\samplexmldtd.xml
<?xml version='1.0'?> <COLLECTION xmlns:dt="urn:schemas-microsoft-com:datatypes"> <DATE dt:dt="datetime">1998-10-13T15:56:00</DATE> <BOOK> <TITLE>Cosmos</TITLE> <AUTHOR>Carl Sagan</AUTHOR> <PUBLISHER>Ballantine Books</PUBLISHER> </BOOK> <BOOK> <TITLE>Catwings</TITLE> <AUTHOR>Ursula K. Le Guin</AUTHOR> <PUBLISHER>Scholastic</PUBLISHER> </BOOK> <BOOK> <TITLE>Home Town</TITLE> <AUTHOR>Tracy Kidder</AUTHOR> <PUBLISHER>Random House</PUBLISHER> </BOOK> </COLLECTION>
Output (in a message box)
Cosmos Carl Sagan Ballantine Books
Implementation: Msxml2.dll
Header and IDL Files: Msxml.h, Xmldom.idl
Version-Independent ProgID: Msxml2.DOMDocument, Msxml2.FreeThreadedDOMDocument
Version-Independent CLSID: f6d90f11-9c73-11d3-b32e-00c04f990bb4
Version-Dependent ProgID: Msxml2.DOMDocument.2.6, Msxml2.FreeThreadedDOMDocument.2.6
Version-Dependent CLSID: f5078f1b-c551-11d3-89b9-0000f81fe221