xml - 将数据从 VBScript 传递到 XSL

标签 xml xslt vbscript asp-classic

我对 VBScript 和 XSL 操作完全陌生,但我需要对这些文件做一些工作...所以这可能是不可能的,或者我误解了当前代码如何工作,或者其他什么。

但据我所知,目前有一个 XSL 文件可以将新闻文章列表从 XML 文件转换为有效的 HTML。但它也限制了数量,因此它只显示三篇文章。它使用<xsl:if test="position() &lt; ($NumberOfArticles + 1)">htmlgoeshere</xsl:if>来做到这一点哪里$NumberOfArticles之前定义为 <xsl:param name="NumberOfArticles" select="3" /> .

使用以下 VBScript 调用此 XSL:

Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
Call xmlhttp.Open("GET", url, False)
Call xmlhttp.send

set feedxml = Server.CreateObject("Microsoft.XMLDOM")
feedxml.async = false
feedxml.load(xmlhttp.ResponseBody)

set feedxsl = Server.CreateObject("Microsoft.XMLDOM")
feedxsl.async = false
feedxsl.load(Server.MapPath("xsl/" & stylesheet))

FeedContent = feedxml.transformNode(feedxsl)

哪里url是 XML 文件的 URL,stylesheet是 XSL 文件的文件名。

我还有一个名为 NumberOfArticles 的 VBScript 变量依赖于用户输入。有没有办法将此变量传递到 XSL 文件中,以便它将设置 $NumberOfArticles到它,而不是硬编码为 3 的值?那么用户可以决定显示更多还是更少?

最佳答案

使用全局xsl:param在你的样式表中,意思是 <xsl:param name="NumberOfArticles" select="3" />作为 xsl:stylesheet 的 child (分别为xsl:transform)。然后您需要确保加载样式表,例如

Dim xsl, template, processor

Set xsl = Server.CreateObject("Msxml2.FreeThreadedDOMDocument.6.0")
xsl.async = False
xsl.load Server.MapPath("xsl/" & stylesheet)

Set template = Server.CreateObject("Msxml2.XslTemplate.6.0")
Set template.stylesheet = xsl

Set processor = template.createProcessor

processor.addParameter "NumberOfArticles", NumberOfArticles    
processor.input = xmlhttp.responseXML
processor.transform

FeedContent = processor.output

关于xml - 将数据从 VBScript 传递到 XSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38587919/

相关文章:

java - 将 XML 转换为 Java 对象的最佳实践是什么?

c# - XML反序列化得到空值

vbscript - 使用 VBScript/WSH 查询 Active Directory 并导出

excel - 为什么在 VBScript 中写入 Excel 单元格值速度很快,但在 PowerShell 中写入速度很慢?

vba - 哪些注册表项决定 Outlook 配置文件

xml - 到达某个节点时停止处理 XML

c# - 亚马逊 MWS 的产品 Feed

xml - 为什么 < 不转换为 < while > 和其他转义字符适当转换

xml - xsl 键与 xpath 谓词匹配

java - 使用TransformerFactory从家庭版到企业版