从XSL访问ASP对象






4.36/5 (13投票s)
展示了一种从 XSL 模板访问 ASP 内置对象(如 Request)的简单方法。
引言
当我开始对 XML/XSL 感兴趣时,我发现无法在 XSL 模板内部访问 ASP 对象,例如 Request
。 我尝试通过 XSLTProcessor.addObject
方法传递它们,它适用于 Session
,但无法使其与 Request
一起工作。 是的,我知道您始终可以使用 xsl:param
在 XSL 模板中预定义所有请求变量,并从 ASP 代码中初始化它们,但假设您不确切知道要查找什么,或者变量太多…… 我想这并不是最好的方法。 我最初的想法是将所有变量作为节点附加到 XML 数据文件,但这会降低您的 Web 应用程序的速度。 然后我设计了这个小类,它允许您在实际需要时获取任何变量。
想法
好吧,诀窍在于,即使 XSL 无法访问 ASP 对象,ASP 本身当然可以。 因此,我将创建一个简单的 VBScript 类,其中包含允许检索 Request
对象变量以及设置/检索 Session
变量的函数。 一旦您理解了该想法,就可以根据需要扩展它。
Class ASPObjects
'returns Request object variables
'QType here represents a collection
' (QueryString, Form or Server(ServerVariables))
Public Function GetRequestVariable(Key, QType)
Select Case lcase(QType)
Case "querystring"
GetRequestVariable = CStr(Request.QueryString(Key).Item)
Case "form"
GetRequestVariable = CStr(Request.Form(Key).Item)
Case "server"
GetRequestVariable = CStr(Request.ServerVariables(Key).Item)
Case Else
GetRequestVariable = CStr(Request(Key).Item)
End Select
End Function
'returns Session object variables
Public Function GetSessionVariable(Key)
GetSessionVariable = Session(Key)
End Function
'sets Session object variable
Public Function SetSessionVariable(Key, Value)
Session(Key) = Value
SetSessionVariable = ""
End Function
End Class
如何使用
现在我将介绍如何在您的 XSL/XSLT 中使用上面的类。 在 ASP 脚本中创建 XSLProcessor
后,只需创建 ASPObjects
类的实例,并使用方法 addObject
添加它。 请记住在您的 XSL 模板中创建一个命名空间(我将在下面使用 xasp
)。
'##### test.asp #####
'Loading XML and XSL somewhere
...
set xslProc = xslt.CreateProcessor()
set xasp = new ASPObjects 'creating our object
'adding it to XSL template
call xslProc.addObject(xasp, "urn:asp-objects")
call xslProc.Transform()
TransformXML = xslProc.output
Set xasp = Nothing 'and don't forget to free memory :)
...
现在我们已经将对象传递到 XSL 模板,让我们看看如何使用它。 首先,将另一个命名空间(此处为 urn:asp-objects
)添加到您的 xsl:stylesheet
,然后您可以访问我们对象的函数,如下例所示
<!--test.xslt-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xasp="urn:asp-objects">
<!--namespace added above-->
<xsl:template match="/">
<!--display value of Request.QueryString("hello")-->
<xsl:value-of
select="xasp:GetRequestVariable('hello','querystring')" />
<!--set value of Session("username")-->
<xsl:value-of
select="xasp:SetSessionVariable('username','Me!')" />
</xsl:template>
...
</xsl:stylesheet>
实际上,就这些了。 我告诉过你这并不难 :). 现在您可以扩展该类,使其与 Response
对象一起工作,或者能够获取 cookie 以及其他 Request
参数,或者访问 Server
对象的方法和属性。