将数据从 VBScript 传递到 XSL
Passing data from VBScript to XSL
我完全不熟悉 VBScript 和 XSL 操作,但我需要对此类文件做一些工作...所以有可能这甚至不可能,或者我'我误解了当前代码的工作方式,或者其他什么。
但据我所知,目前有一个 XSL 文件可将新闻文章列表从 XML 文件转换为有效的 HTML。它也限制了数量,所以它只显示三篇文章。它使用 <xsl:if test="position() < ($NumberOfArticles + 1)">htmlgoeshere</xsl:if>
执行此操作,其中 $NumberOfArticles
之前使用 <xsl:param name="NumberOfArticles" select="3" />
.
定义
此 XSL 使用以下 VBScript 调用:
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
(分别为 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
我完全不熟悉 VBScript 和 XSL 操作,但我需要对此类文件做一些工作...所以有可能这甚至不可能,或者我'我误解了当前代码的工作方式,或者其他什么。
但据我所知,目前有一个 XSL 文件可将新闻文章列表从 XML 文件转换为有效的 HTML。它也限制了数量,所以它只显示三篇文章。它使用 <xsl:if test="position() < ($NumberOfArticles + 1)">htmlgoeshere</xsl:if>
执行此操作,其中 $NumberOfArticles
之前使用 <xsl:param name="NumberOfArticles" select="3" />
.
此 XSL 使用以下 VBScript 调用:
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
(分别为 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