65.9K
CodeProject 正在变化。 阅读更多。
Home

从XSL访问ASP对象

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.36/5 (13投票s)

2003年1月10日

CPOL

2分钟阅读

viewsIcon

82996

展示了一种从 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 对象的方法和属性。

© . All rights reserved.