ZetCode

VBScript SelectSingleNode 方法

最后修改于 2025 年 4 月 9 日

VBScript 中的 SelectSingleNode 方法是 XML DOM (文档对象模型) 的一部分。它搜索与指定 XPath 表达式匹配的第一个节点。此方法对于解析和提取 XML 文档中的数据至关重要。如果找不到匹配项,它将返回单个节点对象或 Nothing。

SelectSingleNode 能够通过 XPath 查询精确地提取 XML 数据。它通常用于配置文件处理和 Web 服务。本教程将通过实际示例涵盖 SelectSingleNode,以演示其在各种场景中的用法。

SelectSingleNode 方法概述

SelectSingleNode 方法将 XPath 表达式作为其参数。它在当前节点的后代中搜索匹配项。该方法在 VBScript 脚本中的任何 XML DOM 节点对象上都可用。

主要功能包括 XPath 1.0 表达式支持和支持命名空间的查询。如果找不到匹配的节点,它将返回 Nothing。理解此方法有助于创建健壮的 XML 处理脚本。建议在处理结果时进行适当的错误处理。

基本 XML 节点选择

此示例演示了 SelectSingleNode 按名称查找节点的​​最简单用法。它展示了加载 XML 字符串并选择特定元素。然后显示所选节点的文本内容。

basic_selection.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.loadXML "<root><person><name>John Doe</name><age>30</age></person></root>"

Set nameNode = xmlDoc.SelectSingleNode("//name")
WScript.Echo nameNode.text ' Output: John Doe

Set xmlDoc = Nothing

该脚本创建一个 XML DOM 文档并加载一个简单的 XML 字符串。然后,它使用 "//name" XPath 来使用 SelectSingleNode 查找 name 元素。将显示该节点的文本内容。这展示了基本的 XML 导航。

使用绝对路径进行选择

此示例显示了使用绝对 XPath 路径选择特定节点。绝对路径从文档根开始。当您了解 XML 文档的确切结构时,这种方法非常有用。

absolute_path.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.loadXML "<bookstore><book><title>VBScript Guide</title><price>29.99</price></book></bookstore>"

Set priceNode = xmlDoc.SelectSingleNode("/bookstore/book/price")
WScript.Echo priceNode.text ' Output: 29.99

Set xmlDoc = Nothing

该脚本加载书店 XML 结构。它使用绝对路径 "/bookstore/book/price" 直接访问 price 元素。此方法很精确,但需要了解完整的文档结构。

使用属性条件进行选择

SelectSingleNode 可以使用 XPath谓词根据属性值选择节点。此示例演示了查找属性值与特定值匹配的节点。这对于过滤 XML 数据很有用。

attribute_condition.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xml = "<users><user id='101'>Alice</user><user id='102'>Bob</user></users>"
xmlDoc.loadXML xml

Set userNode = xmlDoc.SelectSingleNode("//user[@id='102']")
WScript.Echo userNode.text ' Output: Bob

Set xmlDoc = Nothing

该脚本加载带有 ID 属性的用户数据。XPath "//user[@id='102']" 查找 id 等于 102 的 user 节点。这展示了基于属性的选择,这是一种强大的 XML 查询技术。

使用命名空间进行选择

此示例展示了在使用 SelectSingleNode 时如何处理带有命名空间的 XML 文档。命名空间在 XPath 查询中需要特殊处理。该示例演示了注册和使用命名空间前缀。

namespace_selection.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.setProperty "SelectionNamespaces", "xmlns:ns='http://example.com'"
xml = "<ns:root xmlns:ns='http://example.com'><ns:item>Data</ns:item></ns:root>"
xmlDoc.loadXML xml

Set itemNode = xmlDoc.SelectSingleNode("//ns:item")
WScript.Echo itemNode.text ' Output: Data

Set xmlDoc = Nothing

该脚本首先设置 SelectionNamespaces 属性以定义命名空间的前缀。然后,它在 XPath 查询 "//ns:item" 中使用此前缀来选择具有命名空间的节点。这对于处理支持命名空间的 XML 文档至关重要。

使用复杂 XPath 进行选择

此示例演示了 SelectSingleNode 的更复杂的 XPath 表达式。它结合了多个条件来精确选择特定节点。这展示了 XPath 在 VBScript 中的全部功能。

complex_xpath.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xml = "<products><product category='electronics'><name>TV</name><price>499</price></product>" & _
      "<product category='furniture'><name>Chair</name><price>99</price></product></products>"
xmlDoc.loadXML xml

Set node = xmlDoc.SelectSingleNode("//product[price>100 and @category='electronics']/name")
WScript.Echo node.text ' Output: TV

Set xmlDoc = Nothing

该脚本加载产品数据并使用复杂的 XPath 查询。该表达式查找价格超过 100 的电子产品并选择其名称。这展示了在 XPath 中结合属性测试和值比较。

来源

XML DOM 文档

在本文中,我们探讨了 VBScript 中的 SelectSingleNode 方法,涵盖了其用法和实际应用。从简单的节点选择到复杂的 XPath 查询,这些示例展示了强大的 XML 处理功能。有了这些知识,您就可以在 VBScript 项目中有效地解析和提取 XML 文档中的数据。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有多年的编程经验。我自 2007 年以来一直撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面有八年以上的经验。

列出所有 VBScript 教程