2016-07-26 38 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