ZetCode

VBScript MSXML2.DOMDocument 对象

最后修改于 2025 年 4 月 9 日

VBScript 中的 MSXML2.DOMDocument 对象提供了 XML 文档的解析和操作功能。它是 Microsoft XML Core Services (MSXML) 的一部分。该对象能够以编程方式加载、创建和修改 XML 文档。

MSXML2.DOMDocument 支持 XPath 查询和 XSLT 转换。它广泛用于配置文件、数据交换和 Web 服务。本教程通过实际示例介绍了 DOMDocument 的用法。

DOMDocument 对象概述

MSXML2.DOMDocument 对象表示内存中的 XML 文档。它提供了加载、保存和导航 XML 数据的方法。该对象实现了 W3C DOM (Document Object Model) Level 1 和 Level 2 规范。

关键属性包括 asyncdocumentElementparseError。重要方法有 loadsaveselectNodes。理解该对象有助于创建健壮的 XML 处理脚本。

加载和解析 XML 文件

本示例演示如何从磁盘加载 XML 文件并解析其内容。它展示了基本的错误处理和文档导航。脚本在处理之前会检查加载错误。

load_xml_file.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.validateOnParse = True

If xmlDoc.Load("C:\data\books.xml") Then
    Set root = xmlDoc.documentElement
    WScript.Echo "Root element: " & root.nodeName
Else
    WScript.Echo "Error loading XML: " & xmlDoc.parseError.reason
End If

Set xmlDoc = Nothing

脚本创建一个 DOMDocument 对象,并将 async 设置为 false 以进行同步加载。它尝试加载“books.xml”并检查结果。如果成功,则显示根元素名称。否则,显示错误。

创建新的 XML 文档

本示例展示了如何从头开始创建新的 XML 文档。它演示了如何添加元素、属性和文本节点。生成的文档被保存到磁盘。

create_xml.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set root = xmlDoc.createElement("Catalog")
xmlDoc.appendChild root

Set book = xmlDoc.createElement("Book")
book.setAttribute "id", "101"
root.appendChild book

Set title = xmlDoc.createElement("Title")
title.Text = "VBScript Programming"
book.appendChild title

xmlDoc.Save "C:\data\new_catalog.xml"
Set xmlDoc = Nothing

脚本创建一个带有根元素“Catalog”的新 XML 文档。它添加一个带有 id 属性的“Book”元素。然后将带有文本内容的“Title”元素添加到该书中。最后,将文档保存到“new_catalog.xml”。

使用 XPath 查询 XML

本示例演示如何使用 XPath 查询 XML 文档中的特定节点。它展示了如何选择符合条件的节点并遍历结果。XPath 提供了强大的查询功能。

xpath_query.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.Load "C:\data\books.xml"

Set books = xmlDoc.selectNodes("//Book[@category='Programming']")
For Each book In books
    Set title = book.selectSingleNode("Title")
    WScript.Echo title.Text
Next

Set xmlDoc = Nothing

脚本加载一个 XML 文件,并选择所有类别为“Programming”的 Book 元素。它遍历匹配的节点并显示它们的标题。XPath 表达式为 XML 数据提取提供了灵活的查询选项。

修改 XML 文档

本示例展示了如何修改现有的 XML 内容。它演示了更新元素值和添加新节点。然后将修改后的文档保存回磁盘。

modify_xml.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.Load "C:\data\books.xml"

Set price = xmlDoc.selectSingleNode("//Book[1]/Price")
price.Text = "29.99"

Set book = xmlDoc.selectSingleNode("//Book[last()]")
Set newBook = book.cloneNode(True)
newBook.setAttribute "id", "105"
xmlDoc.documentElement.appendChild newBook

xmlDoc.Save "C:\data\books_updated.xml"
Set xmlDoc = Nothing

脚本加载一个 XML 文件,并更新第一本书的价格。然后它克隆最后一本书,更改其 id,并将其追加到文档中。最后,将修改后的文档保存为新文件名。

使用 XSLT 转换 XML

本示例演示如何使用 XSLT 将 XML 转换为 HTML。它展示了如何加载 XML 和 XSLT 文件并执行转换。结果被保存为 HTML 文件。

xslt_transform.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xslDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xslDoc.async = False

xmlDoc.Load "C:\data\books.xml"
xslDoc.Load "C:\data\books.xsl"

Set fso = CreateObject("Scripting.FileSystemObject")
Set outFile = fso.CreateTextFile("C:\data\books.html", True)
outFile.Write xmlDoc.transformNode(xslDoc)
outFile.Close

Set xmlDoc = Nothing
Set xslDoc = Nothing
Set fso = Nothing

脚本加载 XML 和 XSLT 文档。它使用 transformNode 执行转换。生成的 HTML 被保存到文件中。XSLT 为表示提供了强大的 XML 转换功能。

来源

MSXML2.DOMDocument 文档

在本文中,我们探讨了 VBScript 中的 MSXML2.DOMDocument 对象,涵盖了其用法和实际应用。从基本的加载到高级转换,这些示例展示了 XML 处理。通过这些知识,您可以为脚本添加强大的 XML 处理功能。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有多年的编程经验。我自 2007 年起撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面有八年以上的经验。

列出所有 VBScript 教程