2016-07-26 92 views
2

我对VBScript和XSL的操作都是全新的,但是我需要在这些文件上做一些工作......所以有可能这些都不可能,或者我误解了当前代码的工作方式,或者其他什么。将数据从VBScript传递到XSL

但是从我收集的内容来看,目前有一个XSL文件,它将XML文件中的新闻文章列表转换为有效的HTML文件。它也限制了数量,所以它只显示三篇文章。它使用<xsl:if test="position() &lt; ($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?那么用户可以决定更多还是更少显示?

+0

查看https://msdn.microsoft.com/en-us/library/ms762312(v=vs.85).aspx,它向您展示了如何使用“addParameter”方法。这个例子是在jscript中,而不是vbscript,但它不应该太难转换它。 –

回答

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 
+0

感谢您的回应。但是,我似乎得到一个'对象不支持这个属性或方法'错误,指的是'processor = template.createProcessor'行...... – clb

+0

它是否与'processor = template.createProcessor()'一起工作?恐怕我的VBScript技能是有限的,我主要试图记住我如何在JScript中完成它,然后将其转录为VBScript,但我承认我对精确VBScript语法规则的了解并不好,因此该片段希望能够显示哪些对象和哪些方法使用,但可能需要对语法细节进行一些更正。 –

+2

原来这个错误信息试图误导我。我需要做的就是在问题行之前使用Set。感谢您的帮助,它现在正在按照我的要求工作! – clb