VBScript MSXML2.IXMLDOMNodeList Object
last modified April 9, 2025
The MSXML2.IXMLDOMNodeList
object in VBScript represents a collection
of XML nodes. It is part of the Microsoft XML Core Services (MSXML) library.
This object provides methods to access and manipulate nodes in an XML document.
It is commonly returned by methods like getElementsByTagName
.
IXMLDOMNodeList
allows iteration through nodes and accessing them
by index. It maintains the order of nodes as they appear in the XML document.
This tutorial covers IXMLDOMNodeList
with practical examples to
demonstrate its usage in VBScript.
IXMLDOMNodeList Object Overview
The IXMLDOMNodeList
interface provides several key properties and
methods. The length
property returns the number of nodes in the
collection. The item
method retrieves a node by its index position.
Nodes in the collection are zero-indexed. The object is live, meaning changes to the XML document are reflected automatically. Understanding this object is essential for effective XML processing in VBScript applications.
Basic NodeList Iteration
This example demonstrates how to load an XML document and iterate through all
nodes in a NodeList. We'll use the getElementsByTagName
method to
retrieve all elements with a specific tag name.
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0") xmlDoc.async = False xmlDoc.load("books.xml") If xmlDoc.parseError.errorCode <> 0 Then WScript.Echo "Error loading XML: " & xmlDoc.parseError.reason WScript.Quit End If Set bookNodes = xmlDoc.getElementsByTagName("book") For i = 0 To bookNodes.length - 1 WScript.Echo "Book Title: " & bookNodes.item(i).getAttribute("title") Next Set bookNodes = Nothing Set xmlDoc = Nothing
The script loads an XML file and retrieves all book
elements.
It then iterates through the NodeList using a For loop. For each node, it
outputs the value of the title
attribute. The length
property determines the loop bounds.
Accessing Specific Nodes in a NodeList
This example shows how to access specific nodes in a NodeList by index. We'll demonstrate both direct access and checking for node existence before access. This is useful when you need specific nodes rather than iterating all.
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0") xmlDoc.async = False xmlDoc.load("employees.xml") If xmlDoc.parseError.errorCode <> 0 Then WScript.Echo "Error loading XML: " & xmlDoc.parseError.reason WScript.Quit End If Set empNodes = xmlDoc.getElementsByTagName("employee") ' Access first employee If empNodes.length > 0 Then WScript.Echo "First employee: " & empNodes.item(0).text End If ' Access third employee if exists If empNodes.length >= 3 Then WScript.Echo "Third employee: " & empNodes.item(2).text Else WScript.Echo "Third employee not found" End If Set empNodes = Nothing Set xmlDoc = Nothing
The script checks the NodeList length before accessing specific indices.
This prevents errors when trying to access non-existent nodes. The item
method retrieves nodes by their zero-based position. Always validate the
NodeList length before accessing specific indices.
Modifying Nodes in a NodeList
This example demonstrates how to modify nodes within a NodeList. Since NodeList is live, changes to nodes are immediately reflected in the XML document. We'll update attribute values for all matching nodes.
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0") xmlDoc.async = False xmlDoc.load("products.xml") If xmlDoc.parseError.errorCode <> 0 Then WScript.Echo "Error loading XML: " & xmlDoc.parseError.reason WScript.Quit End If Set productNodes = xmlDoc.getElementsByTagName("product") For i = 0 To productNodes.length - 1 productNodes.item(i).setAttribute "status", "active" Next ' Save modified XML xmlDoc.save "products_updated.xml" Set productNodes = Nothing Set xmlDoc = Nothing
The script loads an XML file and retrieves all product
elements.
It then iterates through the NodeList and updates each product's status
attribute. The changes are immediately reflected in the NodeList and saved to
a new file. This demonstrates the live nature of NodeList collections.
Filtering Nodes in a NodeList
While NodeList doesn't have built-in filtering, we can implement custom filtering logic. This example shows how to process only nodes that meet specific criteria. We'll check attribute values during iteration.
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0") xmlDoc.async = False xmlDoc.load("orders.xml") If xmlDoc.parseError.errorCode <> 0 Then WScript.Echo "Error loading XML: " & xmlDoc.parseError.reason WScript.Quit End If Set orderNodes = xmlDoc.getElementsByTagName("order") WScript.Echo "Processing high-value orders:" For i = 0 To orderNodes.length - 1 Set order = orderNodes.item(i) amount = CDbl(order.getAttribute("amount")) If amount > 1000 Then WScript.Echo "Order ID: " & order.getAttribute("id") & _ ", Amount: $" & amount End If Next Set orderNodes = Nothing Set xmlDoc = Nothing
The script processes only orders with amounts greater than $1000. It demonstrates how to implement custom filtering logic when working with NodeList. Each node's attributes are examined during iteration to determine if processing should occur. This pattern is useful for selective node processing.
Converting NodeList to Array
Sometimes it's useful to convert a NodeList to an array for easier manipulation. This example shows how to create an array from a NodeList. We'll preserve node references in the array for later processing.
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0") xmlDoc.async = False xmlDoc.load("customers.xml") If xmlDoc.parseError.errorCode <> 0 Then WScript.Echo "Error loading XML: " & xmlDoc.parseError.reason WScript.Quit End If Set customerNodes = xmlDoc.getElementsByTagName("customer") ' Create array to hold nodes Dim customerArray() ReDim customerArray(customerNodes.length - 1) ' Populate array For i = 0 To customerNodes.length - 1 Set customerArray(i) = customerNodes.item(i) Next ' Process array For Each cust In customerArray WScript.Echo "Customer: " & cust.getAttribute("name") Next Set customerNodes = Nothing Set xmlDoc = Nothing
The script creates an array sized to match the NodeList length. It then copies each node reference into the array. The array can be processed independently of the original NodeList. This technique is useful when you need to work with a static collection of nodes.
Source
MSXML2.IXMLDOMNodeList Documentation
In this article, we have explored the MSXML2.IXMLDOMNodeList
object
in VBScript, covering its usage and practical applications. From basic iteration
to advanced filtering and conversion techniques, these examples demonstrate
effective XML processing. With this knowledge, you can enhance your VBScript
applications with robust XML handling capabilities.
Author
List all VBScript tutorials.