Returns a list of all descendant elements that match the supplied name.
Set objXMLDOMNodeList = oXMLDOMElement.getElementsByTagName(tagName)
HRESULT getElementsByTagName( BSTR tagName, IXMLDOMNodeList **resultList);
Returns S_OK if successful, or an error code otherwise.
Elements appear in the order encountered in a preorder traversal of this element's tree.
Note that the XMLDOMNodeList object is returned even if there are no matches. In such a case, the length of the list will be set to zero.
The IXMLDOMNodeList interface is live and immediately reflects changes to the nodes that appear in the list.
// 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; }