将数据从VBScript传递到XSL

时间:2016-07-26 10:53:37

标签: 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?那么用户可以决定显示更多还是更少?

1 个答案:

答案 0 :(得分:3)

在样式表中使用全局xsl:param,即将<xsl:param name="NumberOfArticles" select="3" />作为xsl:stylesheet的子项(分别为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