VBScript SelectNodes 方法
最后修改于 2025 年 4 月 9 日
VBScript 中的 SelectNodes
方法是 XML DOM (文档对象模型) 的一部分。它允许使用 XPath 表达式查询 XML 文档以选择匹配的节点。这种强大的方法能够有效地提取和操作 VBScript 应用程序中的 XML 数据。
SelectNodes
返回一个包含所有匹配元素的节点列表。它常用于解析配置文件、Web 服务响应和数据交换格式。本教程将通过实际示例介绍 SelectNodes
的用法。
SelectNodes 方法概述
SelectNodes
方法将 XPath 表达式作为其参数。它会搜索 XML 文档并返回所有匹配该表达式的节点。该方法在 VBScript 中的任何 XML DOM 节点对象上都可用。
主要功能包括通过 XPath 语法进行复杂的查询。它可以按元素名称、属性值或层次关系进行搜索。SelectNodes
是区分大小写的,并在适用时需要正确的 XML 命名空间处理。
基本节点选择
此示例演示了 SelectNodes
最简单的用法,即选择具有特定标签名的所有元素。它从字符串加载 XML 文档,并查询所有 "book" 元素。然后,结果将在循环中进行处理。
Set xmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = False xmlDoc.loadXML "<library><book><title>VBScript Guide</title></book>" & _ "<book><title>XML Mastery</title></book></library>" Set books = xmlDoc.SelectNodes("//book") For Each book In books WScript.Echo book.SelectSingleNode("title").text Next Set xmlDoc = Nothing
脚本创建一个 XML DOM 文档并加载示例文档数据。XPath 表达式 "//book" 选择文档中的所有 book 元素。然后,循环提取并显示每本书的标题。这展示了基本节点选择和导航。
按属性选择节点
此示例展示了如何使用 SelectNodes
根据属性值选择节点。XPath 表达式根据特定的属性条件过滤元素。这对于查找 XML 文档中的特定数据非常有用。
Set xmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = False xmlDoc.loadXML "<users><user role='admin'>Alice</user>" & _ "<user role='user'>Bob</user><user role='admin'>Charlie</user></users>" Set admins = xmlDoc.SelectNodes("//user[@role='admin']") For Each admin In admins WScript.Echo admin.text & " is an admin" Next Set xmlDoc = Nothing
脚本加载包含具有 role 属性的用户元素的 XML。XPath "//user[@role='admin']" 仅选择 role 为 "admin" 的用户。方括号用于包含属性条件。这展示了基于属性的过滤。
层次节点选择
此示例演示了如何根据节点在 XML 文档中的层次位置进行选择。XPath 表达式遍历父子关系以查找特定节点。这展示了结构化文档的遍历。
Set xmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = False xmlDoc.loadXML "<departments><dept name='IT'>" & _ "<employee>John</employee><employee>Sarah</employee></dept>" & _ "<dept name='HR'><employee>Mike</employee></dept></departments>" Set itEmployees = xmlDoc.SelectNodes("//dept[@name='IT']/employee") For Each emp In itEmployees WScript.Echo "IT employee: " & emp.text Next Set xmlDoc = Nothing
脚本仅选择 IT 部门内的员工。XPath 表达式首先找到 name='IT' 的 dept 元素,然后选择其 employee 子元素。这种两步导航展示了层次查询的功能。
选择多个节点类型
此示例展示了如何使用单个 XPath 表达式选择不同类型的节点。竖线字符 (|) 在 XPath 中用作联合运算符。这允许将多个查询合并到一个结果集中。
Set xmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = False xmlDoc.loadXML "<config><setting name='timeout'>30</setting>" & _ "<log level='debug'/><server port='8080'/></config>" Set nodes = xmlDoc.SelectNodes("//setting | //log | //server") For Each node In nodes If node.nodeName = "setting" Then WScript.Echo "Setting: " & node.text Else WScript.Echo "Element: " & node.nodeName End If Next Set xmlDoc = Nothing
脚本使用一个查询选择 setting、log 和 server 元素。XPath "//setting | //log | //server" 组合了三个独立的查询。然后,循环根据其 nodeName 属性分别处理每种节点类型。
使用命名空间与 SelectNodes
此示例演示了带有 XML 命名空间的 SelectNodes
,这需要特殊处理。命名空间前缀必须在 XPath 表达式中声明和使用。这展示了如何处理带命名空间的 XML。
Set xmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = False xmlDoc.setProperty "SelectionNamespaces", "xmlns:ns='http://example.com'" xmlDoc.loadXML "<ns:data xmlns:ns='http://example.com'>" & _ "<ns:item>Value1</ns:item><ns:item>Value2</ns:item></ns:data>" Set items = xmlDoc.SelectNodes("//ns:item") For Each item In items WScript.Echo item.text Next Set xmlDoc = Nothing
脚本首先设置 SelectionNamespaces 属性来声明命名空间前缀。XML 文档对所有元素使用 ns 前缀。XPath 表达式必须包含此前缀才能匹配节点。这确保了正确的命名空间感知查询。
来源
在本篇文章中,我们探讨了 VBScript 中的 SelectNodes
方法,介绍了它的用法和实际应用。从基本节点选择到复杂的命名空间处理,这些示例展示了强大的 XML 处理能力。掌握这些知识后,您就可以有效地解析和操作 VBScript 应用程序中的 XML 数据。