getElementsByTagName Method (IXMLDOMElement)
Returns a list of all descendant elements that match the supplied name.
JScript Syntax
var objXMLDOMNodeList = oXMLDOMElement.getElementsByTagName(tagName);
Parameters
tagName
A string specifying the name of the element to find. The tagName
value "*"
matches all descendant elements of this element.
Return Value
An object. Returns IXMLDOMNodeList
object containing all elements that match the supplied name.
Example
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
var nodeBook, nodelistAuthor;
xmlDoc.async = false;
xmlDoc.load("books.xml");
if (xmlDoc.parseError.errorCode != 0) {
var myErr = xmlDoc.parseError;
WScript.Echo("You have error " + myErr.reason);
} else {
nodeBook = xmlDoc.selectSingleNode("//book");
nodelistAuthor = nodeBook.getElementsByTagName("author");
WScript.Echo(nodelistAuthor.item(0).text);
}
Output
When used with the sample XML file (books.xml), this example returns the following message box output:
Gambardella, Matthew
C/C++ Syntax
HRESULT getElementsByTagName(
BSTR tagName,
IXMLDOMNodeList **resultList);
Parameters
tagName
[in]
The name of the element to find. The tagName
value "*"
matches all descendant elements of this element.
resultList
[out, retval]
An IXMLDOMNodeList
object containing all elements that match the supplied name.
Return Values
S_OK
The value returned if successful.
Example
// Find all Nodes with a particular tag.
BOOL DOMDocFindNodesWithTag()
{
BOOL bResult = FALSE;
CString strFindText (_T("author"));
IXMLDOMNodeList *pIDOMNodeList = NULL;
IXMLDOMNode *pIDOMNode = NULL;
long value = 0;
BSTR bstrItemText = NULL;
HRESULT hr;
try
{
// Create the DOMDocument and initialise m_pIXMLDOMDocument2.
// Find all "author" elements.
hr = m_pIXMLDOMDocument2->getElementsByTagName(
(TCHAR *)strFindText.GetBuffer(0),
&pIDOMNodeList);
SUCCEEDED(hr) ? 0 : throw hr;
// Get the length of the list returned by the previous find.
hr = pIDOMNodeList->get_length(&value);
if(SUCCEEDED(hr))
{
pIDOMNodeList->reset();
// Loop through the elements found and display the contents.
for(int ii = 0; ii < value; ii++)
{
hr = pIDOMNodeList->get_item(ii, &pIDOMNode);
SUCCEEDED(hr) ? 0 : throw hr;
if(pIDOMNode)
{
hr = pIDOMNode->get_text(&bstrItemText);
SUCCEEDED(hr) ? 0 : throw hr;
if(bstrItemText)
{
bResult = TRUE;
::MessageBox(NULL, bstrItemText, strFindText, MB_OK);
::SysFreeString(bstrItemText);
bstrItemText = NULL;
}
pIDOMNode->Release();
pIDOMNode = NULL;
}
}
pIDOMNodeList->Release();
pIDOMNodeList = NULL;
}
}
catch(...)
{
if(pIDOMNodeList)
pIDOMNodeList->Release();
if(pIDOMNode)
pIDOMNode->Release();
if(bstrItemText)
::SysFreeString(bstrItemText);
bResult = FALSE;
DisplayErrorToUser();
}
return bResult;
}
Remarks
Elements appear in the order encountered in a preorder traversal of this element's tree.
The IXMLDOMNodeList
object is returned even if there are no matches. In this case, the length of the list will be set to zero.
The IXMLDOMNodeList
is live and immediately reflects changes to the nodes that appear in the list.
The getElementsByTagName
method simulates the matching of the provided argument against the result of the tagName
property of IXMLDOMElement
. When executed, it does not recognize or support namespaces. Instead, you should use the selectNodes
method, which is faster in some cases and can support more complex searches.
Versioning
Implemented in: MSXML 3.0 and MSXML 6.0