用VBScript制作网站搜索 -- 如何变为 JavaScript?

eaglesky 2001-07-20 08:34:36
最好能给解释。多谢!

用VBScript制作个人网站搜索引擎


摘要:本文探讨了只利用VBScript和XML技术创建不需要数据库服务器的搜索引擎,该搜索引擎在最基本的Web服务器和IE 4.0以上客户端环境中运行,可以查询自己网站上的各种信息,尤其适合没有服务器端脚本(CGI、ASP、JSP……)支持和数据库支持的个人网站应用。

关键词:XML、XML文档对象模型(XMLDOM)、搜索引擎、VBScript、文档对象模型(DOM)、Internet

在Internet中,搜索引擎技术是一种十分重要的信息检索手段,目前Internet上的搜索引擎分为两类。

一类是分类法,分类法的做法是把各个网站登陆的信息按照一套分类方法分成若干目录,每个目录下又有几个子目录。分类法的代表是早期的Yahoo和Sohu,例如:



在Sohu的分类检索中,首页下分为了娱乐休闲、国家与地区、工商经济、计算机与互联网等一级目录,在一级目录中以计算机与互联网为例,分为互联网、软件、编程、免费资源等二级目录,互联网目录下又分为门户网站、免费电子邮件、网上教程等三级目录……

另一种搜索引擎实现方法就是关键字搜索。关键字搜索有很多具体实现方法:CGI、ASP等脚本程序或利用Microsoft Index Server,Microsoft Transaction Server等中间件的Internet应用……这种搜索引擎的代表是Google、天网等,以及Yahoo和Sohu的关键字搜索部分。
Google的实例:



高级搜索
使用偏好
搜索所有网站 搜索中文(简体)网页


关键字搜索具有精确、快速的特性,但一个高性能的关键字搜索引擎除了需要Web服务器,还需要中间件服务器、应用服务器、数据库服务器的支持。以下是一个中间件型的关键字搜索引擎典型实例:




客户端通过浏览器向Web服务器请求搜索引擎程序,搜索引擎程序调用中间件进行搜索处理,这种搜索处理包括在本网站上数据库中的搜索和对Internet上其他服务器的搜索。然后中间件服务器把搜索结果返回给Web服务器上的搜索引擎程序。搜索引擎程序再将数据封装为HTML或XML返回给客户端的浏览器。

反观现在的个人网站,大多使用的是提供商提供的免费空间,没有CGI、没有ASP、没有执行和写入权限、没有数据库,还有的免费空间连1M以上的文件都不让上传(题外话),所以在个人网站上用上面的方法实现关键字搜索引擎是不现实的。我们要实现关键字搜索,就必须找到一种不需服务器端动态脚本和数据库的方法,而且它需要满足以下条件:
1.数据具有良好的结构性;
2.有方便的数据访问接口;
3.有方便的数据查找接口;
4.能够生成具有良好封装型的HTML。

我们可以通过这样一种解决方案实现以上构想:




客户端通过浏览器请求XML文档和客户端脚本语言,Web服务器像返回HTML一样返回给浏览器XML和客户端脚本,在由浏览器进行计算,得出搜索结果。这样做的优点是不需增加Web服务器的负担;缺点是XML文档在被计算之前需要完全下载到客户端,假如存储的记录太多,就会在下载上浪费很多时间(熟悉网络程序的人会发现,这实际上继承了分布式网络应用出现之前的结构)。

让我们看一看这种方案的性能:

1.数据的结构性
让我们比较一下传统数据库的表和XML

ID Name Phone
1 张三 61111111
2 李四 62222222
3 王五 63333333



我们从右图可以看出:XML文档有媲美数据库的良好文档结构。



2.数据访问接口
在Internet Explorer中,微软提供了XML文档对象模型(XMLDOM),这样我们可以通过对XML文档对象的操作轻松访问XML文档,我们以一个存储文章信息的XML文档TECH.XML为例:
'VBScript
Dim xmldoc
Set xmldoc = CreateObject("Microsoft.XMLDOM")
xmldoc.load "tech.xml"
以上代码段首先创建一个XML文档对象,然后调用其load方法从TECH.XML装载XML文档

3.数据查找接口
'VBScript
Set objNodeList = xmldoc.getElementsByTagName("title")
Set objdiscList = xmldoc.getElementsByTagName("discribe")
Set objhrefList = xmldoc.getElementsByTagName("href")
这三行代码分别从XML文档对象中查找出标签为"title"、"discribe"、"href"的元素,存放到XMLDOM提供的NodeList(节点列表)对象中。

4.数据的封装型
由于IE和Netscape支持XML。所以可以直接显示XML,也可以在脚本程序中使用微软提供的文档对象模型(DOM)写出一定格式。

完整代码见下:

search.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>搜索</title>
<script language="VBScript">
<!--
Dim xmldoc
Set xmldoc = CreateObject("Microsoft.XMLDOM")
xmldoc.load "tech.xml"
function search()
if keyword.Value="" then
msgbox "Input the keyword first!!!"
else
key=keyword.value
document.writeln "<html><head><meta http-equiv=Content-Type content=text/html; charset=gb2312>
<title>Cyber Class 网站文章检索(从标题查询)</title></head><body>Cyber Class网站文章检索<br>
<br><table border=1 cellpadding=0 cellspacing=0 width=100% bordercolor=#000000
bordercolorlight=#000000bordercolordark=#FFFFFF><tr><td bgcolor=#108cd8><font color=#FFFFFF>
Title</font></td><td bgcolor=#108cd8><font color=#FFFFFF>Discribe</font></td><td bgcolor=#108cd8>
<font color=#FFFFFF>GO!</font></td></tr>"
Set objNodeList = xmldoc.getElementsByTagName("title")
Set objdiscList = xmldoc.getElementsByTagName("discribe")
Set objhrefList = xmldoc.getElementsByTagName("href")
For i = 0 To (objNodeList.length - 1)
if InStr(objNodeList.Item(i).Text,key)<>0 then
document.write "<tr><td>" & objNodeList.Item(i).Text & "</td>"
document.write "<td>" & objdiscList.Item(i).Text & "</td>"
document.write "<td><a href=" & objhrefList.Item(i).Text & " target=_blank>" & objhrefList.Item(i).Text &
"</a></td></tr>"
end if
Next
document.writeln "</table><a href=search.htm>返回</a><br><br><br>注意:该查询系统
<font color=#ff0000>大小写敏感</font>,查询英文时若未返回结果请改换大小写再试。<br>
<p align=center>Powered by Lynne@ Cyber Class</p></body></html>"
end if
end function
function searchboth()
if keyword.Value="" then
msgbox "Input the keyword first!!!"
else
key=keyword.value
document.writeln "<html><head><meta http-equiv=Content-Type content=text/html; charset=gb2312>
<title>Cyber Class网站文章检索(从标题和摘要查询)</title></head><body>Cyber Class网站文章检索
<br><br><table border=1 cellpadding=0 cellspacing=0 width=100% bordercolor=#000000
bordercolorlight=#000000 bordercolordark=#FFFFFF><tr><td bgcolor=#108cd8><font color=#FFFFFF>
Title</font></td><td bgcolor=#108cd8><font color=#FFFFFF>Discribe</font></td><td bgcolor=#108cd8>
<font color=#FFFFFF>GO!</font></td></tr>"
Set objNodeList = xmldoc.getElementsByTagName("title")
Set objdiscList = xmldoc.getElementsByTagName("discribe")
Set objhrefList = xmldoc.getElementsByTagName("href")
For i = 0 To (objNodeList.length - 1)
if (InStr(objNodeList.Item(i).Text,key)<>0) or (InStr(objdiscList.Item(i).Text,key)<>0) then
document.write "<tr><td>" & objNodeList.Item(i).Text & "</td>"
document.write "<td>" & objdiscList.Item(i).Text & "</td>"
document.write "<td><a href=" & objhrefList.Item(i).Text & " target=_blank>" & objhrefList.Item(i).Text &
"</a></td></tr>"
end if
Next
document.writeln "</table><a href=search.htm>返回</a><br><br><br>注意:该查询系统
<font color=#ff0000>大小写敏感</font>,查询英文时若未返回结果请改换大小写再试。<br>
<p align=center>Powered by Lynne @ Cyber Class 2001/6</p>
</body></html>"
end if
end function
-->
</script>
</head>
<body>
Cyber Class网站文章检索<br>
<br>Input the keyword:
<input type="text" id="keyword"><br><br>
<input type="button" value="仅在标题中查询" onclick="search()">    
<input type="button" value="在标题和摘要中查询" onclick="searchboth()">
<br><br><br>
说明:该查询系统利用XML和VBScript技术制作,可以在本网站技术版块中按照标题或摘要查询文章。
<br><br>
注意:该查询系统<font color="#ff0000">大小写敏感</font>,查询英文时若未返回结果请改换大
小写再试。<br><br>
注意:若出现-2147483638运行时错误,请耐心等待网页下载完毕(IE左下角出现完成)再点击查询按钮
<p align=center>Powered by Lynne @ Cyber Class 2001/6</p>
</body>
</html>


tech.xml

<?xml version="1.0" encoding="gb2312"?>
<tech>
<article>
<title>XML介绍(new)</title>
<discribe>?/font>笆率瞪希琗ML将为每一种流行的编程语言带来一个语言的革命。正因为如此,这是一个意义
深远的变革,其
影响力甚至超过了HTML为演示世界带来的影响。” --比尔 盖茨</discribe>
<href>01060601.htm</href>
</article>
<article>
<title>中国软件业需要软件蓝领(new)</title>
<discribe>一提起中国软件业,我们总是和印度相比较,因为20年前,印度软件业和中国软件业几乎同时
起步。但在几年时间里,印度一下子就把中国远远地抛在后面。1999年到2000年印度的信息产业总产值
达到59亿美元,差不多是中国的3倍。很多专家对此进行了研究和探讨...</discribe>
<href>01052001.htm</href>
</article>
<article>
<title>COMDEX/CHINA想要“专业”的尴尬</title>
<discribe>在较少大众媒体的宣传下,以“新经济时代的信息化解决方案”为主题的第五届COMDEX
China2001,4月4日在中国国际展览中心开幕。尽管如此,许多人还是闻讯赶来,期望能在这里触摸到一
些信息。然而不管是从参观的设计路线,还是从参展商的安排上,让人在体会到主办者煞费苦心的同时,
也感受到一些想要“专业”的尴尬。</discribe>
<href>01040802.htm</href>
</article>
<article>
<title>让媒体靠边站,现在是我们技术代表发言的时候了!</title>
<discribe>作为一个技术性公司的管理者,首先要面对的是在技术的滚滚浪潮中找准自身定位的难题。而
每一个走向成功的高科技企业家,毫无意外的都是在思想上能够有所突破的先行者。如果一个拘泥于陈旧
思想或者跟随当前状况人云亦云的人,
是绝对不可能带来革命性的创造的。</discribe>
<href>01033101.htm</href>
</article>
<article>
<title>面向未来,面向.NET(1)——.NET的目标</title>
<discribe>什么是.NET呢?实质上,.NET是Microsoft贴在现有产品和未来产品上的一个新式行销标签。
在Microsoft服务器端
产品中,如基于Windows DNA 2000技术...</discribe>
<href>01032501.htm</href>
</article>
<article>
<title>面向未来,面向.NET(2)——.NET的体系结构</title>
<discribe>接下来我们将深入地分析.NET体系以及用于设计和创建企业Web应用的工具,但首先我们可以
将.NET体系描述如下:
它是一组公共的服务...</discribe>
<href>01033102.htm</href>
</article>
<article>
<title>面向未来,面向.NET(3)——CLR、ASP.NET和应对策略(new)</title>
<discribe>如前所述,CLR和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收
集),并保证应用和底层操作系统之间必要的分离。</discribe>
<href>01040803.htm</href>
</article>
<article>
<title>电子商务理论研究综述</title>
<discribe>当前电子商务方面的理论研究主要可概括为三个方面:电子商务的应用模型、电子商务系统的
实现框架、电子商务中难点问题的研究。</discribe>
<href>ec.htm</href>
</article>
<article>
<title>走近ASP.NET</title>
<discribe>Asp.net又叫asp+,他不是asp的简单升级,而是Microsoft推出的新一代Active Server Pages。
ASP.net是微软发展的新的体系.NET的一部分...</discribe>
<href>asp+.htm</href>
</article>
<article>
<title>电脑病毒与基因算法</title>
<discribe>今天,恼人的计算机病毒已经发展到了一个新的阶段,怎样新的阶段呢?就是涉及到了衡量生
命的尺度,不再象开始一样仅仅是一个概念上的类比</discribe>
<href>virus.htm</href>
</article>
<article>
<title>解析一个安全网络模型</title>
<discribe>防火墙过滤Internet上的不良信息以及防范攻击、盗窃和破坏被保护的网络信息资源;隧道交
换机具有加密隧道的安全虚拟私有网络(VPN)的功能...</discribe>
<href>nmodel.htm</href>
</article>
<article>
<title>路由器是什么</title>
<discribe>是什么把网络相互连接起来?是路由器。路由器是互联网络的枢纽、"交通警察"。目前路由器
已经广泛应用于各行各业...</discribe>
<href>routerdf.htm</href>
</article>
<article>
<title>路由器的作用</title>
<discribe>路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。选择通畅快捷的近
路,能大大提高通信速度,减轻网络系统通信负荷...</discribe>
<href>01032502.htm</href>
</article>
<article>
<title>路由器的类型</title>
<discribe>互联网各种级别的网络中随处都可见到路由器。接入网络使得家庭和小型企业可以连接到某个
互联网服务提供商;企业网中的路由器...</discribe>
<href>routerca.htm</href>
</article>
<article>
<title>路由器的结构(new)</title>
<discribe>从体系结构上看,路由器可以分为第一代单总线单CPU结构路由器、第二代单总线主从CPU结
构路由器、第三代单总线对称式多CPU结构路由器;第四代多总线多CPU结构路由器、第五代共享内存式
结构路由器、第六代交叉开关体系结构路由器和基于机群系统的路由器等多类。</discribe>
<href>01040804.htm</href>
</article>
</tech>

以上代码在Win98 + PWS下及163.com下运行通过。
大家可以到http://go2.163.com/~bjpu980707/search.htm进行试验。

总结:这种方法由于其本身局限性只适合于访问量不很大(<1000/Day)、文章不很多
(<500篇)的个人网站,否则浏览者会感到等待的时间较长。同时因为需要首先装载完
XML文档,所以在下载未完成时进行查找会出现错误。另外这个搜索引擎还有值得改进的
地方:加入错误处理,使下载未完成时进行查找不出现错误;用JavaScript声明查找类,
继承XMLDOM对象,做出面向对象的查找。由于期末考试临近,就留给大家来实现吧。
具体有关XMLDOM请到MSDN-〉Platform SDK->Web Services->Workshop->XML下参考。希望能给拥有个人网站的各位版主带来帮助。

Lynne 2001/6/13

elynne@263.net
http://bjpu980707.yeah.net
...全文
124 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
olvest4000 2001-08-05
  • 打赏
  • 举报
回复
zhenbang a !
eaglesky 2001-07-25
  • 打赏
  • 举报
回复
我不小气啊,我给了我能给的最多的80分了.
多谢斑竹.
孟子E章 2001-07-25
  • 打赏
  • 举报
回复
是有错误的,我当时就说了,我这里暂时没环境,无法调试
olvest4000 2001-07-25
  • 打赏
  • 举报
回复
别理这个小气的家伙啊!!!

哈哈哈!)(!!(!
eaglesky 2001-07-25
  • 打赏
  • 举报
回复
我自己再试试看吧
eaglesky 2001-07-24
  • 打赏
  • 举报
回复
IE老说 这个语句 if(document.form1.keyword.Value=="") 前面缺 "{"
请教斑竹 。。。。 我什么也不知道 :(
eaglesky 2001-07-24
  • 打赏
  • 举报
回复
不给分是为了便于再向你讨教。我想斑竹不会在意吧?
:)
eaglesky 2001-07-24
  • 打赏
  • 举报
回复
多谢!我去研究研究。
孟子E章 2001-07-21
  • 打赏
  • 举报
回复
下面是大致的修改,你要是对XML,VBSCRIPT,JAVASCRIPT比较了解的话,应该好改,关键是思路。
下面的代码我的笔记本是IE4,无法调试,肯定有错误,你你自己再改改,另外
if ((objNodeList.Item(i).Text,key)!=0)是不对的,你自己改一下:

search.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>搜索</title>
<script>
<!--
var xmldoc
var xmldoc = ActivXObject("Microsoft.XMLDOM")
xmldoc.load("tech.xml")
function search()
if(document.form1.keyword.Value=="")
alert("Input the keyword first!!!")
else
{
key=document.form1.keyword.value
document.writeln("<html><head><meta http-equiv=Content-Type content=text/html; charset=gb2312><title>Cyber Class 网站文章检索(从标题查询)</title></head><body>Cyber Class网站文章检索<br><br><table border=1 cellpadding=0 cellspacing=0 width=100% bordercolor=#000000 bordercolorlight=#000000bordercolordark=#FFFFFF><tr><td bgcolor=#108cd8><font color=#FFFFFF>Title</font></td><td bgcolor=#108cd8><font color=#FFFFFF>Discribe</font></td><td bgcolor=#108cd8><font color=#FFFFFF>GO!</font></td></tr>")
var objNodeList = xmldoc.getElementsByTagName("title")
var objdiscList = xmldoc.getElementsByTagName("discribe")
var objhrefList = xmldoc.getElementsByTagName("href")
for(var i = 0;i<(objNodeList.length - 1);i++){
if ((objNodeList.Item(i).Text,key)!=0)
{
document.write("<tr><td>" + objNodeList.Item(i).Text + "</td>")
document.write("<td>"+objdiscList.Item(i).Text + "</td>")
document.write("<td><a href=" + objhrefList.Item(i).Text + " target=_blank>" + objhrefList.Item(i).Text +"</a></td></tr>")
}
}
document.writeln("</table><a href=search.htm>返回</a><br><br><br>注意:该查询系统<font color=#ff0000>大小写敏感</font>,查询英文时若未返回结果请改换大小写再试。<br><p align=center>Powered by Lynne@ Cyber Class</p></body></html>")
}
function searchboth()
if(document.form1.keyword.Value=="")
alert("Input the keyword first!!!")
else
{
document.form1.key=keyword.value
document.writeln "<html><head><meta http-equiv=Content-Type content=text/html; charset=gb2312><title>Cyber Class网站文章检索(从标题和摘要查询)</title></head><body>Cyber Class网站文章检索<br><br><table border=1 cellpadding=0 cellspacing=0 width=100% bordercolor=#000000 bordercolorlight=#000000 bordercolordark=#FFFFFF><tr><td bgcolor=#108cd8><font color=#FFFFFF>Title</font></td><td bgcolor=#108cd8><font color=#FFFFFF>Discribe</font></td><td bgcolor=#108cd8><font color=#FFFFFF>GO!</font></td></tr>")
var objNodeList = xmldoc.getElementsByTagName("title")
var objdiscList = xmldoc.getElementsByTagName("discribe")
var objhrefList = xmldoc.getElementsByTagName("href")
for(var i = 0;i<(objNodeList.length - 1);i++){
if ((objNodeList.Item(i).Text,key)!=0) || ((objdiscList.Item(i).Text,key)!=0){
document.write("<tr><td>" + objNodeList.Item(i).Text + "</td>")
document.write("<td>" + objdiscList.Item(i).Text + "</td>")
document.write("<td><a href=" + objhrefList.Item(i).Text + " target=_blank>" + objhrefList.Item(i).Text +"</a></td></tr>")
}
}
document.writeln("</table><a href=search.htm>返回</a><br><br><br>注意:该查询系统<font color=#ff0000>大小写敏感</font>,查询英文时若未返回结果请改换大小写再试。<br><p align=center>Powered by Lynne @ Cyber Class 2001/6</p></body></html>")
-->
</script>
</head>
<body>
Cyber Class网站文章检索<br>
<br>Input the keyword:
<form name=form1>
<input type="text" id="keyword"><br><br>
<input type="button" value="仅在标题中查询" onclick="search()">    
<input type="button" value="在标题和摘要中查询" onclick="searchboth()">
</form>
<br><br><br>
说明:该查询系统利用XML和VBScript技术制作,可以在本网站技术版块中按照标题或摘要查询文章。
<br><br>
注意:该查询系统<font color="#ff0000">大小写敏感</font>,查询英文时若未返回结果请改换大
小写再试。<br><br>
注意:若出现-2147483638运行时错误,请耐心等待网页下载完毕(IE左下角出现完成)再点击查询按钮
<p align=center>Powered by Lynne @ Cyber Class 2001/6</p>
</body>
</html>
eaglesky 2001-07-21
  • 打赏
  • 举报
回复
我就是不知道才请高手指点的。多谢!
只要某些关键部分就行了。
孟子E章 2001-07-20
  • 打赏
  • 举报
回复
关键是:你要理解VBSCRIPT与JAVASCRIPT之间对应的关系,比如:set xxx=转为var xxx=等

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧