XML在ASP中的一些运用

xml

  使用可扩展标志语言(XML)编写的脚本和组件和.XML被用来定义对象,方法,属性等等。
  同时脚本还提供函数。脚本语言可以是javascript, vbscript等等。运用在网站的运用程序和网站的普通例子,现在都可以被转换成scriptlets. 只要使用scriptlets 来写组件,他们可以再被从新使用在网站或则运用程序各部分,既可以使用在服务端(例如ASP代码)也能够被使用在客户端(例如浏览器)。

这里将集中讨论服务端的用来组件ASP代码的Scriptlets。
早些时候,ASP开发者习惯写include文件。用来做公共的服务端例行程序,
还用在他们的网站运用程序中。从功能上说,include文件被局限在仅仅是在页面中引用。
完成传递参数的功能。
现在同样的公共例行程序能够中添加了scriptlet方法和并且有助与在运用程序中使用组件。
这个方法现在非常普遍的运用在网站运用程序中,能够被运行在同一个服务器上的运用程序重用。
这个方法使得从数据库中获取(pull-down)数据将变得非常通俗化。

例子:建立scriptlet方法和属性,使得很通俗的从数据库中获取数据。
并且使得运行在同一个服务器上所有的运用程序使用这个同样的scriptlet,而不用重新写代码了。

代码如下:
scriptlet文件名为scp_query2list.sct

 <?XML version="1.0"?>
 <scriptlet>
 <registration
     description="scp_query2list"
     progid="scpquery2list.Scriptlet"
     version="1.00"
     classid="{e32d2a70-4e11-11d3-a9f0-0080c8034244}"
 >
 </registration>

 <public>
     <method name="query2list">
         <PARAMETER name="objConn"/>
         <PARAMETER name="query"/>
     </method>
 </public>

 <implements type="ASP" id="ASP"/>
 <script language="VBScript">

 <![CDATA][
     Sub query2list(objConn, query)     
         Dim objRs
         Set objRs = objConn.Execute(query)
             If objRs.EOF AND objRs.BOF Then
                 Response.write "<option value='none'>没有找到记录。</option>"
             Else
                 Do While Not objRs.EOF
                     Response.write "<option value='" & objRS(0) & "'>" & objRs(0) & "</option>"
                     objRs.MoveNext
                 Loop
             End If
         objRS.Close
         Set objRS = nothing
     End Sub
 ]]>

 </script>
 </scriptlet>
其中在scriptlets中使用的各种元素的具体说明可以在http://msdn.microsoft.com/scripting处找到。
下面是怎么具体调用scriptlets的代码:(只要是在同一个服务器上注册了scriptlets的运用程序,都可以使用这段代码)
query2list.asp 文件:
 <%@ Language=VBScript %>
 <%

     Option Explicit

     Dim objConn
     Dim dbPath
     Dim sql
     Dim objScpQuery2list

     Set objConn = Server.CreateObject ("ADODB.Connection")
     dbPath="DBQ=" & Server.MapPath("techpapers_test.mdb")

     objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & dbPath

     '--- query required for pull down
     sql = "select AuthorFirst from Papers"
     Set objScpQuery2list = Server.CreateObject ("scpquery2list.Scriptlet")
 %>
 <html>
 <body>
 <center>
 <form name = "fr1">
     <select>
     <option value="none" selected>选择发行人</option>
     <% call objScpQuery2list.query2list(objConn, sql) %>
     </select>
 </form>
 </center>
 </body>
 </html>

 <%
     objConn.Close
     Set objConn = nothing
     Set objScpQuery2list = nothing
 %>

出现的问题:
第一次使用scriptlets有可能会出现这样的问题,就是内存浪费现象,改进方法如下:
将ASP对象传递给scriptlets,而代替使用ASP接口。(就是不使用 <implements type="ASP" id="ASP"/>申明)
testscp.sct:
     <?XML version="1.0"?>
 <scriptlet>
 <?scriptlet error="true" debug="true"?>
 <registration
         description="testscp"
         progid="testscp.Scriptlet"
         version="1.00"
         classid="{78a33aa0-335d-11d3-a9a9-0080c8034244}"
 >
 </registration>

 <public>
      <property name="cnnState">
       <get/>
      </property>
      <method name="TestWrite">
      <parameter name="sHTML"/>
   </method>
      <method name="TestWriteLine">
   <parameter name="sHTML"/>
   </method>
   <method name="ASPConnect">
   <parameter name="oServer"/>
       <parameter name="oApplication"/>
       <parameter name="oSession"/>
      <parameter name="oRequest"/>
   <parameter name="oResponse"/>
   </method>
 </public>
 <script language="VBScript">
 <![CDATA][
  Private cnnState, Server, Application, Session, Request, Response
  cnnState = False

  Function get_cnnState()
   get_cnnState = cnnState
  End Function
 
  Sub ASPConnect(oServer, oApplication, oSession, oRequest, oResponse)
   Set Server = oServer
   Set Application = oApplication
   Set Session = oSession
   Set Request = oRequest
   Set Response = oResponse
   cnnState = True
  End Sub

  Sub TestWrite(sHTML)
   Response.Write sHTML
  End Sub

  Sub TestWriteLine(sHTML)
   Response.Write sHTML & "<BR>"
  End Sub
 ]]>

 </script>
 </scriptlet>

传递ASP对象的ASP程序如下:
testscp.asp代码

 <%
 Set scrip=Server.CreateObject("testscp.Scriptlet")
 if Err then
  Response.Write "<BR>Error:" & Err.Number
  Response.Write "<BR>" & Err.Description
  Response.Write "<BR>" & Err.Source
  Response.End
 End If

 Response.Write "<BR> cnnState=" & scrip.cnnState
 if Err then
  Response.Write "<BR>Error:" & Err.Number
  Response.Write "<BR>" & Err.Description
  Response.Write "<BR>" & Err.Source
  Response.End
 End If
  
 Response.Write "<BR>Connecting..."
 scrip.ASPConnect Server, Application, Session, Request, Response
 if Err then
  Response.Write "<BR>Error" & Err.Number
  Response.Write "<BR>" & Err.Description
  Response.Write "<BR>" & Err.Source
  Response.End
 End If
  
 Response.Write "<BR>cnnState=" & scrip.cnnState & "<BR>"
 Response.Write "<BR>Testing ...Write<BR>"
 
 scrip.TestWriteLine ""
 scrip.TestWrite "This is the first part "
 scrip.TestWrite "and this is the second."

 Response.Write "<BR>Testing ...WriteLine<BR>"
 scrip.TestWriteLine "This is text with a line break."
 scrip.TestWriteLine "And so is this."
 %>
上面的代码没有包括<implement type = "ASP"/>, 但是仍然可以访问ASP对象。
因为他们是被当成对象传递给scriptlet.
下面再给出一个很常用的取时间的狸子:

scp_dmy.sct
 <?XML version="1.0"?>
 <scriptlet> 

 <?scriptlet error="true" debug="true"?>

 <registration
     description="scp_dmy"
     progid="scpdmy.Scriptlet"
     version="1.00"
     classid="{bba68a50-3ae0-11d3-a9c0-0080c8034244}"
 >
 </registration> 

 <public>    
     <method name = "option_num">
     <PARAMETER name = "num"/>
     </method>
     <method name = "option_month">
     </method>
     <method name = "option_year">
     </method>
 </public>  

 <implements type="ASP" id="ASP"/>  
 <script language="VBScript">

 <![CDATA][
 Sub option_num(num)
     For i = 1 to num
         If i<10 Then
             x = 0 & i
         Else
             x = i
         End If
         Response.write "<option value = " & x & ">" & x & "</option>"
     Next
 End Sub  

 Sub option_month()
     For i = 1 to 12
         If i<10 Then
             x = 0 & i
         Else
             x = i
         End If
         Response.write "<option value = " & x & ">" & MonthName(x,True) & "</option>"
     Next
 End Sub 

 Sub option_year()
     For i = -1 To 3
         yy = year(DateAdd("yyyy",i,Date()))
         Response.write "<option value = " & yy & ">" & yy & "</option>"
      Next
 End Sub
  
 ]]>
 </script>
  
 </scriptlet>

Dmy_check.asp: 文件
 <%
     Set scrip = Server.CreateObject("scp_dmy.Scriptlet")
 %>

 <html>
 <head></head>
 <body>

 <form name = "form1">
 从 :
 <select name = "D1">
 <option value="">dd</option>
 <% call scrip.option_num(31) %>
 </select>
  
 <select name = "M1">
 <option value="">mm</option>
 <% call scrip.option_month() %>
 </select>

 <select name = "Y1">
 <option value="">yy</option>
 <% call scrip.option_year() %>
 </select>
 <BR><BR>

 到 :
 <select name = "D2">
 <option value="">dd</option>
 <% call scrip.option_num(31) %>
 </select>
  

 <select name = "M2">
 <option value="">mm</option>
 <% call scrip.option_month() %>
 </select>

 <select name = "Y2">
 <option value="">yy</option>
 <% call scrip.option_year() %>
 </select>
 </form>

 <%
     Set scrip = nothing
 %>  

 </body>
 </html>
要记住的是,现在服务器上所有的程序都能够使用这个scriptlet,这能够减少include文件的使用。
上面的代码还能够增加一些功能,例如使用不同的格式显示日期。
也就是说如果一个运用程序需要显示dd-mm-yyyy的日期格式,可以在scriptlet中调用各自的函数。

最后,使用scriptlet的还有一个好处就是,它不象真正的ASP组件,因为真正的ASP组件在注册和取消注册的
时候都需要你重新启动IIS,而使用scriptlet是不需要这么干的,仅仅是几句代码而已。

时间: 2024-12-30 14:38:59

XML在ASP中的一些运用的相关文章

以前收集的一些资料---XML在ASP中的一些运用

翻译得很蹩脚,望大家谅解,呵呵.Scriptlets - 一个更好的组织你的ASP代码的方法使用可扩展标志语言(XML)编写的脚本和组件和.XML被用来定义对象,方法,属性等等.同时脚本还提供函数.脚本语言可以是javascript, vbscript等等.运用在网站的运用程序和网站的普通例子,现在都可以被转换成scriptlets. 只要使用scriptlets 来写组件,他们可以再被从新使用在网站或则运用程序各部分,既可以使用在服务端(例如ASP代码)也能够被使用在客户端(例如浏览器)这里将

asp中读取xml以及Utf-8和Gb2312乱码问题

xml|问题 asp中创建xml对象通常使用:CreateObject("Microsoft.XMLDOM")读取节点:selectSingleNode("nodename")//nodename为节点名.读取属性:attributes.getNamedItem("attribute")//attribute为节点中所具有的属性名.加载xml: load(Server.MapPath("data.xml")) async 属性

用XML+VBS在ASP中实现报表的打印

xml|打印 一.前言 ASP在电子商务上应用广泛,报表的处理又有一些麻烦.本文介绍了在ASP中利用 本人写的Report Server Page脚本解释器实现报表的显示.打印. 二.准备工作 (1)安装Visual Reprort Design软件 Visual Report Design是本人写的一个免费的报表设计器,程序的发行只需要 安装一个控件即可. 想要的网友可以到http://go.163.com/reportpro/ 下载 (2)设计报表 通过Visual Report Desig

XML,Python,在ASP中到底有什么优势?

xml 最近做一个ASP的东西,想着多学习一些新的技术.最冲动的就是想使用XML以及Python,Ruby这样的脚本语言. 关于XML: xml提供数据,最大的好处是跨平台,如果用txt文件作为数据,则在数据量少的时候速度很快,数据量大的时候速度则快速下降.用数据库提供数据在速度上是最好的,但是移植性和跨平台不是最好,最重要的是增加了很大的成本(商业上不能用盗版的).对于硬件的要求也提高了.     如果空间不支持数据库,那么只好用xml了. 和txt文件相比,xml增加了结构,操作起来方便多了

使用XML VBS技术在ASP中实现报表的打印

xml|打印 一.前言ASP在电子商务上应用广泛,报表的处理又有一些麻烦.本文介绍了在ASP中利用本人写的Report Server Page脚本解释器实现报表的显示.打印.二.准备工作(1)安装Visual Reprort Design软件Visual Report Design是本人写的一个免费的报表设计器,程序的发行只需要安装一个控件即可.想要的网友可以到http://go.163.com/reportpro/ 下载(2)设计报表通过Visual Report Design 的可视化界面可

完成asp语言对XML文档中指定节点文本的增加、删除、修改、查看

<% '---------------------------------------------------------------- '程序简介: 完成asp教程语言对xml文档中指定节点文本的增加.删除.修改.查看 '入口参数: 无 '出口参数: 无 '------------------------------------------------ '函数名字:connectxml() '入口参数: filename 需要连接或打开的xml文件名 '出口参数: 无 '返回值 :connec

XML在语音中的应用

xml|语音 随着XML在工业界被广泛的采用,在不同的领域不同的行业,各自派生出了一些在一些特定领域适用的XML子集.在这一系列文章中中将要主要介绍的VoiceXML就是其中之一.它和WML的地位非常相似.WML是应用于无线上网中的特种语言,VoiceXML是应用于语音浏览的特种语言.无线上网(WAP)和语音浏览是现在网络发展的两大热点,XML在它们身上都找到了用武之地. 整篇文章将比较介绍XML在语音中应用的一些重要环节.除了VoiceXML之外,还会介绍一些XML在语音技术中应用的其他方面.

XML加ASP实现网页“本地化”

xml|网页 想让你的站点能被来自多个国家的冲浪者看明白吗?无疑,这就需要提供多个语言版本的页面内容,也就是所谓的"本地化"功能.最容易想到的方法就是分别编写多种语言的页面内容,然后放置到不同的目录下,再在首页上添加导航到各自语言位置的链接.很明显,这样的处理方式将浪费许多包含公共元素以及设计框架的空间,而且修改.维护也很烦琐.有什么好方法吗?当然,本文就介绍如何结合使用XML与ASP技术实现这个目的. 本文将讨论如下几个方面的内容:创建包含语言资源的XML文档.使用ASP创建Web页

如何在ASP+中使用自定义的PAGELET

asp+ asp+ 中提供了一种类似xml 的 代码描写方法,例如<asp:label id=test runat=server> 在本篇文章里 我会给大家描述一下 如何 编写自己的pagelet 例如:<asp888:myTestMenu 首先我们写一个aspc 文件,这个文件必须在aspx 文件中进行引用 <%@ Page Language="vb" %> <%@ Import Namespace="System.Drawing&quo