ZetCode

VBScript TransformNode 方法

最后修改于 2025 年 4 月 9 日

VBScript 中的 TransformNode 方法用于使用 XSLT 样式表转换 XML 文档。它将 XSL 转换应用于 XML 节点,并将结果作为字符串返回。此方法是 Microsoft XML DOM 实现的一部分。它对于 VBScript 中的 XML 处理至关重要。

TransformNode 支持强大的 XML 数据操作和呈现。它通常用于将 XML 转换为 HTML 或其他格式。本教程通过实际示例涵盖 TransformNode,以演示其在各种场景中的用法。

TransformNode 方法概述

TransformNode 方法以 XSLT 样式表作为输入并返回转换后的输出。它作用于 XML DOM 节点,根据 XSL 规则转换它们。该方法可通过 MSXML DOM 对象访问。

主要功能包括 XML 到 HTML 的转换和数据重构。它需要格式正确的 XML 和 XSLT 文档。TransformNode 是同步的,并立即返回结果。理解此方法有助于创建动态 XML 处理脚本。

基本 XML 到 HTML 转换

此示例演示了 TransformNode 将 XML 转换为 HTML 的最简单用法。它展示了加载 XML 和 XSLT 文档。转换将生成 HTML 输出自 XML 数据。

basic_transform.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xslDoc = CreateObject("MSXML2.DOMDocument")

xmlDoc.async = False
xslDoc.async = False

xmlDoc.load("data.xml")
xslDoc.load("transform.xsl")

result = xmlDoc.transformNode(xslDoc)
WScript.Echo result

Set xmlDoc = Nothing
Set xslDoc = Nothing

该脚本创建 XML 和 XSLT DOM 文档。它从“data.xml”加载 XML 数据,从“transform.xsl”加载 XSLT。TransformNode 应用转换。结果包含由 XML 源生成的 HTML。

转换特定的 XML 节点

TransformNode 可以转换特定节点,而不是整个文档。此示例显示在转换前选择节点。它演示了对文档子集的定向转换。

node_selection.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xslDoc = CreateObject("MSXML2.DOMDocument")

xmlDoc.async = False
xslDoc.async = False

xmlDoc.load("catalog.xml")
xslDoc.load("product.xsl")

Set productNode = xmlDoc.selectSingleNode("//product[@id='101']")
result = productNode.transformNode(xslDoc)

WScript.Echo result
Set xmlDoc = Nothing
Set xslDoc = Nothing

该脚本加载 XML catalog 和 XSLT 样式表。它使用 XPath 选择一个特定的产品节点。TransformNode 仅转换此节点。此方法对于处理文档片段很有用。

参数化 XSLT 转换

此示例展示了将参数传递给 XSLT 转换。参数允许对转换过程进行动态控制。该脚本演示了在调用 TransformNode 之前设置 XSLT 参数。

parameters.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xslDoc = CreateObject("MSXML2.DOMDocument")
Set template = CreateObject("MSXML2.XSLTemplate")

xmlDoc.async = False
xslDoc.async = False

xmlDoc.load("data.xml")
xslDoc.load("param_transform.xsl")

Set processor = template.createProcessor()
processor.input = xmlDoc
processor.addParameter "sortOrder", "descending"
processor.addParameter "maxItems", 5

processor.transform
result = processor.output

WScript.Echo result
Set xmlDoc = Nothing
Set xslDoc = Nothing
Set template = Nothing

该脚本使用 XSLTemplate 进行参数化转换。它设置了两个参数:sortOrder 和 maxItems。处理器将它们应用于转换。此技术支持灵活的、运行时可配置的转换。

转换中的错误处理

此示例演示了 XML 转换过程中的正确错误处理。它展示了检查文档加载状态和捕获转换错误。健壮的错误处理对于生产脚本至关重要。

error_handling.vbs
On Error Resume Next

Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xslDoc = CreateObject("MSXML2.DOMDocument")

xmlDoc.async = False
xslDoc.async = False

If Not xmlDoc.load("data.xml") Then
    WScript.Echo "XML Error: " & xmlDoc.parseError.reason
    WScript.Quit 1
End If

If Not xslDoc.load("transform.xsl") Then
    WScript.Echo "XSL Error: " & xslDoc.parseError.reason
    WScript.Quit 1
End If

result = xmlDoc.transformNode(xslDoc)
If Err.Number <> 0 Then
    WScript.Echo "Transformation Error: " & Err.Description
Else
    WScript.Echo result
End If

Set xmlDoc = Nothing
Set xslDoc = Nothing

该脚本使用 parseError 检查加载错误。它使用 VBScript 的错误处理来处理转换错误。此方法可确保在出现问题时出现正常的失败。正确的错误处理可使脚本更可靠。

将 XML 转换为纯文本

TransformNode 可以生成纯文本输出,而不仅仅是 HTML。此示例展示了将 XML 数据转换为 CSV 格式。XSLT 样式表从 XML 输入生成逗号分隔值。

xml_to_csv.vbs
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xslDoc = CreateObject("MSXML2.DOMDocument")

xmlDoc.async = False
xslDoc.async = False

xmlDoc.load("employees.xml")
xslDoc.load("csv_transform.xsl")

result = xmlDoc.transformNode(xslDoc)
WScript.Echo result

Set xmlDoc = Nothing
Set xslDoc = Nothing

该脚本以 XML 格式加载员工数据。XSLT 样式表将其转换为 CSV 输出。TransformNode 应用基于文本的转换。此技术对于数据导出场景很有用。

来源

MSXML TransformNode 文档

在本文中,我们探讨了 VBScript 中的 TransformNode 方法,涵盖了它的用法和实际应用。从基本的 XML 到 HTML 转换到参数化转换,这些示例展示了该方法的通用性。通过这些知识,您可以在 VBScript 应用程序中实现健壮的 XML 处理。

作者

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

列出所有 VBScript 教程