IXMLDOMNodeList

 

Supports iteration through the live collection, in addition to indexed access.

The following script example creates an IXMLDOMNodeList object by using the books.xml document's getElementsByTagName method.

var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");  
var objNodeList;  
xmlDoc.load("books.xml");  
if (xmlDoc.parseError.errorCode != 0) {  
   var myErr = xmlDoc.parseError;  
   WScript.Echo("You have error " + myErr.reason);  
} else {  
   objNodeList = xmlDoc.getElementsByTagName("author");  
   var str = "The node list has " + objNodeList.length + " items.\n";  
   for (var i=0; i < objNodeList.length; i++) {  
      str = str + (i + 1) + ": " + objNodeList.item(i).xml + "\n";  
   }  
   WScript.Echo(str);  
}  
  

Output

The node list has 12 items.  
1: <author>Gambardella, Matthew</author>  
2: <author>Ralls, Kim</author>  
3: <author>Corets, Eva</author>  
4: <author>Corets, Eva</author>  
5: <author>Corets, Eva</author>  
6: <author>Randall, Cynthia</author>  
7: <author>Thurman, Paula</author>  
8: <author>Knorr, Stefan</author>  
9: <author>Kress, Peter</author>  
10: <author>O'Brien, Tim</author>  
11: <author>O'Brien, Tim</author>  
12: <author>Galos, Mike</author>  

The following C/C++ example uses book.xml (below). The example gets all elements with node name AUTHOR and displays the number of nodes found in the XML document.

XML File (book.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>  
  <BOOK>  
    <TITLE>Splish Splash</TITLE>  
    <AUTHOR>Paula Thurman</AUTHOR>  
    <PUBLISHER>Scootney</PUBLISHER>  
  </BOOK>  
</COLLECTION>  
  

CPP File (XMLDOMNodeListSample.cpp)

#include “msxml6.h”  
  
inline void TESTHR( HRESULT _hr )   
   { if FAILED(_hr) throw(_hr); }  
  
//XMLDOMNodeList Sample  
int main(int argc, char* argv[])   
{  
    try {  
        MSXML2::IXMLDOMDocumentPtr docPtr;  
        MSXML2::IXMLDOMNodeListPtr NodeListPtr;  
  
        //init  
        TESTHR(CoInitialize(NULL));   
        TESTHR(docPtr.CreateInstance("Msxml2.DOMDocument.6.0"));  
  
        // load a document  
        _variant_t varXml("C:\\book.xml");  
        _variant_t varOut((bool)TRUE);  
        varOut = docPtr->load(varXml);  
        if ((bool)varOut == FALSE)  
            throw(0);  
        NodeListPtr = docPtr->getElementsByTagName("AUTHOR");  
        MessageBox(NULL, _bstr_t(NodeListPtr->length), _T("Node List length"), MB_OK);  
    } catch(...)  
    {  
        MessageBox(NULL, _T("Exception occurred"), _T("Error"), MB_OK);  
    }  
    CoUninitialize();  
}  
  

A NodeList collection is live; that is, the addition and removal of nodes, and changes within nodes, are immediately reflected in the collection. This means that two successive requests for items using the same index can return two different items, depending on changes to the collection. This also means that changes to the node objects are immediately available in the nodes obtained from the list.

Implementation:

msxml3.dll, msxml2.lib (MSXML 3.0)

msxml6.dll, msxml6.lib (MSXML 6.0)

Header and IDL files: msxml2.h, msxml2.idl, msxml6.h, msxml6.idl

Implemented in: MSXML 3.0, MSXML 6.0

IXMLDOMNodeList Members
IXMLDOMNode

Show: