Returns the definition of the node in the DTD or schema.
Set objXMLDOMNode = oXMLDOMNode.definition
HRESULT get_definition(
IXMLDOMNode **definitionNode);
This value depends on the value of the nodeType method.
The definition method is not supported when using in-line schemas. This behavior is by design because the node being referenced may be deleted or modified after the document is loaded, which would yield unpredictable results.
| NODE_ENTITY_REFERENCE | Returns the node for the entity referenced; that is, returns the ENTITY element that was defined for a given ENTITYREF. Given the ENTITYREF &x;, for example, the definition method returns the node in the DOCTYPE node's entity collection that defines the corresponding ENTITY: <!ENTITY x "y">. |
| NODE_ENTITY | For unparsed entities, returns the NOTATION definition from the DOCTYPE node's notation collection. For example, given the ENTITY <!ENTITY networth SYSTEM "networth.xls" NDATA XLS>, the definition method returns the node corresponding to the notation <!NOTATION XLS PUBLIC "http://www.microsoft.com/office/excel/">. For parsed entities, returns Null. |
| NODE_ATTRIBUTE | Returns the XML-Data Schema AttributeType for a given ATTRIBUTE node. For example, the definition method for the attribute myAttribute="123" returns the node corresponding to the element <AttributeType name="myAttribute"> in the schema. Returns Null when a DTD is used or when no schema is present. |
| NODE_ELEMENT | Returns the XML-Data Schema ElementType for a given ELEMENT node. For example, given the element <myelement>, the definition method returns the node <ElementType name="myelement"> in the specified external schema. Returns Null when a DTD is used or when no schema is present. |
| NODE_CDATA_SECTION, NODE_COMMENT, NODE_DOCUMENT, NODE_DOCUMENT_FRAGMENT, NODE_DOCUMENT_TYPE, NODE_NOTATION, NODE_PROCESSING_INSTRUCTION, NODE_TEXT | Returns Null. |
This member is an extension of the W3C DOM.
The following example demonstrates retrieval of the definition method from an XMLDOMElement:
BOOL DOMNodeGetDefinition()
{
BOOL bResult = FALSE;
BSTR bstrValue;
IXMLDOMElement *pIXMLDOMElement = NULL;
IXMLDOMNode *pIXMLDOMNode = NULL;
IXMLDOMDocument2 *pIXMLDOMDocument = NULL;
HRESULT hr;
try
{
// Create the document and initialize pIXMLDOMDocument.
// Load the document (sample.xml).
// Get the documents root.
hr = pIXMLDOMDocument->get_documentElement(&pIXMLDOMElement);
SUCCEEDED(hr) ? 0 : throw hr;
if(pIXMLDOMElement)
{
hr = pIXMLDOMElement->get_definition(&pIXMLDOMNode);
if(SUCCEEDED(hr) && pIXMLDOMNode)
{
hr = pIXMLDOMNode->get_xml(&bstrValue);
if(SUCCEEDED(hr) && bstrValue)
{
::MessageBox(NULL, bstrValue, _T("Definition"), MB_OK);
::SysFreeString(bstrValue);
bResult = TRUE;
}
RELEASE(pIXMLDOMNode);
}
RELEASE(pIXMLDOMElement);
}
}
catch(...)
{
if(bstrValue)
::SysFreeString(bstrValue);
CHECK_AND_RELEASE(pIXMLDOMNode);
CHECK_AND_RELEASE(pIXMLDOMElement);
// Release the DOMDocument.
DisplayErrorToUser();
}
// Release the document when finished with it.
return bResult;
}
Sample.xml
<?xml version="1.0"?> <SomeDoc xmlns="x-schema:collschema.xml"> <SomeElement Id="first1"> </SomeElement> </SomeDoc>
collschema.xml
<?xml version='1.0'?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<AttributeType name='Id' dt:type="id"/>
<ElementType name='SomeElement' content="mixed" model="open">
<attribute type='Id'/>
</ElementType>
<ElementType name='SomeDoc' content="mixed" model="open">
<attribute type='Id'/>
<element type='SomeElement' minOccurs='1' maxOccurs='*'/>
</ElementType>
</Schema>
Output (in a message box)
<ElementType name='SomeDoc' content="mixed" model="open"> <attribute type='Id'/> <element type='SomeElement' minOccurs='1' maxOccurs='*'/> </ElementType>