Gets the node (subtree) that is applied to the selection.
var objXMLDOMNode = objXMLDOMSelection.context; objXMLDOMSelection.context = objXMLDOMNode;
The following script example shows what is contained in the context of a selection after a query is executed. It also shows that the selection is reset when this property is changed.
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.5.0");
var selection;
xmlDoc.loadXML("<Customer>Microsoft</Customer>");
xmlDoc.setProperty("SelectionLanguage", "XPath");
selection = xmlDoc.selectNodes("//Customer");
alert(selection.context.xml);
The selection.context.xml contains "<Customer>Microsoft</Customer>"; selection.length = 1.
xmlDoc.loadXML("<new>none</new>");
if (xmlDoc.parseError.errorCode <> 0) {
var myErr = xmlDoc.parseError;
alert("You have error " + myErr.reason);
} else {
alert(selection.context.xml);
}
The selection.context.xml contains "<new>none</new>"; selection.length = 0.
Set objXMLDOMNode = objXMLDOMSelection.context objXMLDOMSelection.context = objXMLDOMNode
The following Microsoft® Visual Basic® example shows what is contained in the context of a selection after a query is executed. It also shows that the selected set is reset when this property is changed.
Dim xmlDoc As New Msxml2.DOMDocument50
Dim selection As Msxml2.IXMLDOMSelection
xmlDoc.loadXML ("<Customer>Microsoft</Customer>")
xmlDoc.setProperty "SelectionLanguage", "XPath"
Set selection = xmlDoc.selectNodes("//Customer")
MsgBox selection.context.xml
The selection.context.xml contains "<Customer>Microsoft</Customer>"; selection.length = 1.
xmlDoc.loadXML ("<new>none</new>")
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
MsgBox("You have error " & myErr.reason)
Else
MsgBox selection.context.xml
End If
The selection.context.xml contains "<new>none</new>"; selection.length = 0.
HRESULT get_context(IXMLDOMNode ** ppNode); HRESULT putref_context(IXMLDOMNode * pNode);
get_context only)get_context only)putref_context only)The following C/C++ example shows what is contained in the context property after selectNodes is executed.
#import "msxml5.dll"
using namespace MSXML2;
#define CHECK_AND_RELEASE(pInterface) \
if(pInterface) \
{\
pInterface->Release();\
pInterface = NULL;\
}\
#define RELEASE(pInterface) \
{\
pInterface->Release();\
pInterface = NULL;\
}\
BOOL DOMSelectionContextDemo()
{
BOOL bResult = FALSE;
short sResult = FALSE;
IXMLDOMSelection *pIXMLDOMSelection=NULL;
IXMLDOMNode *pIXMLDOMNode=NULL;
IXMLDOMDocument2 *pIXMLDOMDocument2=NULL;
HRESULT hr;
BSTR bstrValue;
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\\samplexml.xml")), &sResult);
if(SUCCEEDED(hr) && (sResult==VARIANT_TRUE))
{
hr=pIXMLDOMDocument2->selectNodes(
_T("*/BOOK[TITLE='Lover Birds']"),
(IXMLDOMNodeList**)&pIXMLDOMSelection);
if(SUCCEEDED(hr))
{
if(SUCCEEDED(hr) && pIXMLDOMSelection)
{
hr=pIXMLDOMSelection->get_context(&pIXMLDOMNode);
if(SUCCEEDED(hr) && pIXMLDOMNode)
{
hr=pIXMLDOMNode->get_xml(&bstrValue);
if(SUCCEEDED(hr))
::MessageBox(NULL, bstrValue, _T("Current
Selection Context"), MB_OK);
bResult=TRUE;
RELEASE(pIXMLDOMNode);
}
RELEASE(pIXMLDOMSelection);
}
}
}
}
RELEASE(pIXMLDOMDocument2);
}
}
catch(...)
{
CHECK_AND_RELEASE(pIXMLDOMNode);
CHECK_AND_RELEASE(pIXMLDOMSelection);
CHECK_AND_RELEASE(pIXMLDOMDocument2);
DisplayErrorToUser();
}
return bResult;
}
Data File: d:\\inetpub\\wwwroot\\samplexml.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>Lover Birds</TITLE>
<AUTHOR>Cynthia Randall</AUTHOR>
<PUBLISHER>Lucerne Publishing</PUBLISHER>
</BOOK>
<BOOK>
<TITLE>The Sundered Grail</TITLE>
<AUTHOR>Eva Corets</AUTHOR>
<PUBLISHER>Lucerne Publishing</PUBLISHER>
</BOOK>
</COLLECTION>
Output (in a message box)
<?xml version='1.0'?>
<COLLECTION xmlns:dt="urn:schemas-microsoft-com:datatypes">
<DATE dt:dt="datetime">1998-10-13T15:56:00</DATE>
<BOOK>
<TITLE>Lover Birds</TITLE>
<AUTHOR>Cynthia Randall</AUTHOR>
<PUBLISHER>Lucerne Publishing</PUBLISHER>
</BOOK>
<BOOK>
<TITLE>The Sundered Grail</TITLE>
<AUTHOR>Eva Corets</AUTHOR>
<PUBLISHER>Lucerne Publishing</PUBLISHER>
</BOOK>
</COLLECTION>
Because the selectNodes method can be called on any node type, context can also be assigned any node type. A node from a document different from the one that originally created IXMLDOMSelection can also be specified as long as it has the same threading model. Calling context also resets the state of the node list so that nextNode starts over.
To view reference information for Visual Basic, C/C++, or Script only, click the Language Filter button
in the upper-left corner of the page.
Applies to: IXMLDOMSelection