用XML数据岛结合Dom制作通讯录_XML/RSS

一般情况下,如果要为网站提供一个通讯录程序,需要使用CGI结合后台数据库技术,这对WEB服务器的要求比较高,在很多不提供数据库功能的虚拟主机上甚至无法实现。当然,我们还可以采用TXT文本替代数据库,但TXT文本是比较难操作的,我们必须一行一行的读取判断,还要用分隔字符串实现字段分离,无法进行复杂运算。
现在,我们可以使用“可扩展的标记语言 (XML)” 来保存通讯录的数据,从而体现出XML的优点:表现数据的结构化方法,对于保存许多关系型数据结构的文件很有帮助。

一、基本原理:
在Microsoft Internet Explorer 5.0及以后的版本里,我们可以利用XML元素来创建数据岛,数据岛就是被HTML页面引用或包含的XML数据,XML数据可以包含在HTML文件内,也可以包含在某外部文件内,利用XML数据岛可以让我们免除编写复杂脚本的麻烦。DOM可对XML文档进行解析,文档中的元素、实体、属性等所有个体都可以用对象模型表示,整个文档的逻辑结构类似一棵树,生成的对象模型就是树的节点,每个对象同时包含了方法和属性,DOM提供了许多查找节点的方法。利用DOM,开发人员可以动态地创建XML、遍历文档、增加(删除/修改)文档内容,DOM提供的API与编程语言无关,所以对一些DOM标准中没有明确定义的接口,不同解析器的实现方法可能会有所差别。

二、具体流程为:
1、定义XML文件如下所示:
  <?xml version="1.0" encoding="gb2312"?>
    <中国计算机世界出版服务公司通信录>
      <计算机世界 contactID="2">
        <部门名称>计算机室</部门名称>
        <电话号码>139</电话号码>
        <电子邮件>fsdos@163.net</电子邮件>
      </计算机世界>
    </中国计算机世界出版服务公司通信录>
将上述XML文档保存为tele.xml文件,同时,将上述XML文档中的字段内容置空,做为初始化框架数据,另存为newid.xml文件。
2、客户端加载 XML 文档,在放置通讯录的表格中通过DATASRC='#xmldso'将XML文件绑定在表格中,DATASRC属性实际上是通过在要处理的XML元素的ID属性的前面加上#来实现的,所以我们可以在TD元素中间指定具体需要显示的字段;
3、使用DOM技术对通讯录进行增加、删除记录操作;
4、通过XMLHTTP协议连接到服务器,保存XML文档。

三、XML DOM编程简述:
1、客户端dom.htm页面:
<HTML><BODY bgColor=#a1bae6>
<XML id=xmldso src="tele.xml"></XML>
<XML id=newid></XML> <!--加载xml数据-->
<SCRIPT Language=JavaScript>
newid.async = false;
newid.load("newid.xml");
//增加记录;
function addID(){
var doc=xmldso.XMLDocument
var rootnode=doc.documentElement
var sortNode = rootnode.selectNodes("//部门名称")
var currentid = sortNode.length-1
var cc=sortNode.item(currentid).text;
if ((cc=="尚未输入")||(cc==""))
{
alert("请将最后一行数据填写完毕后再增加新的记录!");
}
else

var node= newid.documentElement.childNodes(0).cloneNode(true);
var contactID=parseInt(sortNode.item(currentid).parentNode.getAttribute("contactID"))+1; 
node.setAttribute("contactID",contactID); 
xmldso.documentElement.appendChild(node);
}
}
//删除记录
function delID(whichFld){
var sortNode = xmldso.selectSingleNode("//计算机世界[@contactID='"+whichFld+"']");
if (sortNode.parentNode.childNodes.length>1) sortNode.parentNode.removeChild(sortNode); 
}
</SCRIPT>
<script language="vbscript">
Sub cc_onmouseup '保存记录;
Dim objXML, objXSL, objFSO,strFile, strFileName, strXSL,strURL,TheForm
set SaveXMLDoc=xmldso.XMLDocument
strURL="dns2.asp"
Set objXML = CreateObject("Microsoft.XMLHTTP") '创建MS的XMLHTTP组件;
objXML.Open "post",strURL,false '采用Post提交方式;
objXML.setrequestheader "content-type","application/x-www-form-urlencoded"
objXML.send SaveXMLDoc ' 发送信息,保存XML数据;
'xmlGet = objXML.responsebody '稍等片刻后,得到服务器端传回来的结果;
msgbox "保存成功!" 
Set objXML = Nothing
end sub 
</SCRIPT>
<center><b>计算机世界----通信录</b><br><br>
<TABLE id="table" DATASRC='#xmldso' BORDER CELLPADDING=3>
<!--进行数据绑定-->
<THEAD><TH>编号</TH><TH>部门名称</TH><TH>电话号码</TH><TH>电子邮件</TH></THEAD>
<TR>
<TD><acronym title='点击即可删除该记录'><INPUT TYPE=button size=4 DATAFLD="contactID" onclick="delID(this.value)"></acronym></TD>
<TD><INPUT TYPE=TEXT DATAFLD="部门名称"></TD>
<TD><INPUT TYPE=TEXT DATAFLD="电话号码"></TD> 
<TD><INPUT TYPE=TEXT DATAFLD="电子邮件"></TD>
</TR>
</TABLE>
<INPUT TYPE=BUTTON name=dd id=dd VALUE="增加记录" onmouseover="this.focus()" onmousedown="addID();">
<INPUT TYPE=BUTTON name=cc id=cc VALUE="保存"></center></BODY></HTML>

2、服务器端dns2.asp程序比较简单,在接收到XML数据后,创建文件对象,保存到tele.xml即可:
<
Set ReceivedDoc = CreateObject("Microsoft.XMLDOM") '创建 XML DOM实例;
ReceivedDoc.async=False
ReceivedDoc.load Request '接收XML数据;
Set files=Server.CreateObject("Scripting.FileSystemObject")
Set numtxt=files.CreateTextFile(Server.MapPath("tele.xml"),True)
numtxt.WriteLine(replace(ReceivedDoc.xml,"?>"," encoding=""gb2312""?>")) '将XML数据写入文件
numtxt.Close
response.write ReceivedDoc.xml
>

3、实际使用过程中,还需要增加一个显示通讯录的网页index.htm,其实就是上面dom.htm的简化版,去除所有增加、删除、修改和保存功能,只在表格单元格中用LABEL显示数据:
<HTML><BODY bgColor=#a1bae6>
<XML id=xmldso src="tele.xml"></XML>
<center><b>计算机世界----通信录</b><br><br>
<TABLE id="table" DATASRC='#xmldso' BORDER CELLPADDING=3>
<THEAD><TH>编号</TH><TH>部门名称</TH><TH>电话号码</TH><TH>电子邮件</TH>
</THEAD>
<TR>
<TD><label DATAFLD="contactID"></label></TD>
<TD><label DATAFLD="部门名称"></label></TD>
<TD><label DATAFLD="电话号码"></label></TD> 
<TD><label DATAFLD="电子邮件"></label></TD>
</TR>
</TABLE>
</center></BODY></HTML>

四、使用XML数据岛结合Dom技术的优点:
1、首先,当然是XML本身带来的好处。XML打破了标记定义的垄断,你可以自定义字段名称,在本文所用的XML文件中,连字段名都可以为中文,数据非常地简单明晰,因为它所携带的信息不是显示上的描述,而是信息的语意,极大的加强了文档的可读性。使用XML也便于不同系统之间信息的传输。
2、XML数据岛允许用户在客户端访问与操控数据集,不必频繁的与服务器交互,这对于减轻服务器的负荷很有帮助。同时,由于XML数据岛本身的特点,使得在客户端的数据操作十分简便,减少了编程量。
3、DOM强制使用树模型来访问XML文档中的信息,由于XML本质上就是一种分层结构,所以这种描述方法是相当有效的。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,控制起来相当灵活。
4、采用xmlhttp对象传送XML数据到服务器,客户端页面无闪烁刷新现象。

本程序在基于Windows2000平台的IIS5.0和IE5.0上运行通过。在实际运用过程中,还可使用DOM结合XSL技术为通讯录增加排序、格式转换和数据查找等功能,使用XML数据岛的datapagesize属性以及previousPage、nextPage函数为通讯录增加分页功能,使用DTD与XML Schema动态验证通讯录数据。

 

------------------------THE END----------------------

 

附:(全部源程序)
****************************************************************************
一、index.htm(显示通讯录):
<HTML><BODY bgColor=#a1bae6>
<XML id=xmldso src="tele.xml"></XML>
<center><b>计算机世界----通迅录</b><br><br>
<TABLE id="table" DATASRC='#xmldso' BORDER CELLPADDING=3>
<THEAD><TH>编号</TH><TH>部门名称</TH><TH>电话号码</TH><TH>电子邮件</TH>
</THEAD>
<TR>
<TD><label DATAFLD="contactID"></label></TD>
<TD><label DATAFLD="部门名称"></label></TD>
<TD><label DATAFLD="电话号码"></label></TD> 
<TD><label DATAFLD="电子邮件"></label></TD>
</TR>
</TABLE>
</center></BODY></HTML>
****************************************************************************
二、dom.htm(在线编辑通讯录):
<HTML><BODY bgColor=#a1bae6>
<XML id=xmldso src="tele.xml"></XML>
<XML id=newid></XML>
<SCRIPT Language=JavaScript>
newid.async = false;
newid.load("newid.xml");
function addID(){
var doc=xmldso.XMLDocument
var rootnode=doc.documentElement
var sortNode = rootnode.selectNodes("//部门名称")
var currentid = sortNode.length-1
var cc=sortNode.item(currentid).text;
if ((cc=="尚未输入")||(cc==""))
{
alert("请将最后一行数据填写完毕后再增加新的记录!");
}
else

var node= newid.documentElement.childNodes(0).cloneNode(true);
var contactID=parseInt(sortNode.item(currentid).parentNode.getAttribute("contactID"))+1; 
node.setAttribute("contactID",contactID); 
xmldso.documentElement.appendChild(node);
}
}
function delID(whichFld){
var sortNode = xmldso.selectSingleNode("//计算机世界[@contactID='"+whichFld+"']");
if (sortNode.parentNode.childNodes.length>1) sortNode.parentNode.removeChild(sortNode); 
}
</SCRIPT>
<script language="vbscript">
Sub cc_onmouseup '当点击“保存”按钮时触发;
Dim objXML, objXSL, objFSO,strFile, strFileName, strXSL,strURL,TheForm
set SaveXMLDoc=xmldso.XMLDocument
strURL="dns2.asp"
Set objXML = CreateObject("Microsoft.XMLHTTP") '创建MS的XMLHTTP组件;
objXML.Open "post",strURL,false '采用Post提交方式;
objXML.setrequestheader "content-type","application/x-www-form-urlencoded"
objXML.send SaveXMLDoc ' 发送信息
'xmlGet = objXML.responsebody '稍等片刻后,得到服务器端传回来的结果;
msgbox "保存成功!" 
Set objXML = Nothing
end sub 
</SCRIPT>
<center><b>计算机世界----通信录</b><br><br>
<TABLE id="table" DATASRC='#xmldso' BORDER CELLPADDING=3>
<THEAD>
<TH>编号</TH>
<TH>部门名称</TH>
<TH>电话号码</TH>
<TH>电子邮件</TH>
</THEAD>
<TR>
<TD><acronym title='点击即可删除该记录'><INPUT TYPE=button size=4 DATAFLD="contactID" onclick="delID(this.value)"></acronym></TD>
<TD><INPUT TYPE=TEXT DATAFLD="部门名称"></TD>
<TD><INPUT TYPE=TEXT DATAFLD="电话号码"></TD> 
<TD><INPUT TYPE=TEXT DATAFLD="电子邮件"></TD>
</TR>
</TABLE>
<INPUT TYPE=BUTTON name=dd id=dd VALUE="增加记录" onmouseover="this.focus()" onmousedown="addID();">
<INPUT TYPE=BUTTON name=cc id=cc VALUE="保存"></center></BODY></HTML>
****************************************************************************
三、dns2.asp(后台保存通讯录):
<%
Set ReceivedDoc = CreateObject("Microsoft.XMLDOM")
ReceivedDoc.async=False
ReceivedDoc.load Request
Set files=Server.CreateObject("Scripting.FileSystemObject")
Set numtxt=files.CreateTextFile(Server.MapPath("tele.xml"),True)
numtxt.WriteLine(replace(ReceivedDoc.xml,"?>"," encoding=""gb2312""?>"))
numtxt.Close
response.write ReceivedDoc.xml
%>
****************************************************************************
四、tele.xml(通讯录XML文档):
<?xml version="1.0" encoding="gb2312"?>
<中国计算机世界出版服务公司通信录>
<计算机世界 contactID="1">
<部门名称>电话总机</部门名称>
<电话号码>010-68130909</电话号码>
<电子邮件>webmaster@ccw.com.cn</电子邮件>
</计算机世界>
</中国计算机世界出版服务公司通信录>
****************************************************************************
五、newid.xml(通讯录XML初始化文档):
<?xml version="1.0" encoding="gb2312"?>
<中国计算机世界出版服务公司通信录>
<计算机世界 contactID="1">
<部门名称>尚未输入</部门名称>
<电话号码>保密</电话号码>
<电子邮件>保密</电子邮件>
</计算机世界>
</中国计算机世界出版服务公司通信录>

时间: 2024-11-08 20:23:25

用XML数据岛结合Dom制作通讯录_XML/RSS的相关文章

用XML数据岛结合Dom制作通讯录

一般情况下,如果要为网站提供一个通讯录程序,需要使用CGI结合后台数据库技术,这对WEB服务器的要求比较高,在很多不提供数据库功能的虚拟主机上甚至无法实现.当然,我们还可以采用TXT文本替代数据库,但TXT文本是比较难操作的,我们必须一行一行的读取判断,还要用分隔字符串实现字段分离,无法进行复杂运算. 现在,我们可以使用"可扩展的标记语言 (XML)" 来保存通讯录的数据,从而体现出XML的优点:表现数据的结构化方法,对于保存许多关系型数据结构的文件很有帮助. 一.基本原理: 在Mic

HTML中的XML数据岛记录编辑与添加_XML/RSS

<HTML><HEAD><Title>HTML中的数据岛中的记录集</Title></HEAD><body bkcolor=#EEEEEE text=blue bgcolor="#00FFFF"><Table align=center width="100%"><TR><TD align="center">   <h5><

旧代码回顾:YUI-ext 代码两侧/XML 数据岛/WSC 组件化

YUI-ext 代码两侧 旧时,写 yuiext 的代码的时候便学习过这些代码,两侧都是制作动画的代码.时间大概是两年前左右(07年初),但心路历程感觉是过了许久 呵呵,真的有天上十天,地下十年的感觉.那时候,靠自学,瞎浑的什么的都不懂,往这几句 script 撞呀撞呀,撞到做出效果为止!这不,一番经历,好歹也认识不少:JS 的道路并不坦,学 ajax 真的要下苦功! 言毕,丑汉终需见家翁,呵呵.下是那时稚嫩的代码. var fade_in_pic = function() { var pic

用XML数据岛创建上下文菜单

xml|菜单|创建|数据   上下文菜单就是用户在页面上单击右键时所显示的一组命令.微软的MSDN有一个简单的例子说明了怎样建立自定义菜单.这里,我们将通过XML的数据岛来快速创建自定义的上下文菜单.XML数据岛就是存在于HTML文档中的XML数据的一部分.通过XML文档对象模型[XML document object model (DOM)],我们可以轻松地参考和引用XML里的内容.我们这里利用XML数据岛来存储上下文菜单的多个定义,其中的每一个定义都可以和文档中的任一元素相联系.在没有定义的

XML指南——XML数据岛

xml|数据 使用IE5.0或者更高的版本,XML数据可以以数据岛的形式嵌入HTML页面. 在HTML页面中嵌入XML数据 使用非官方标准的<xml>标记可以将XML数据嵌入到HTML页面中. XML数据可以象下面的例子那样嵌入HTML页面: <xml id="note">   <note>   <to>Tove</to>   <from>Jani</from>   <heading>Rem

用XML数据岛解决用户界面问题 - 1

xml|解决|数据|问题 从属列表问题(dependent list problem)"的问题时常被提出.问题时常出现于当你有两个以上的选择列表时,一个主列表有若干个选项,你希望当用户选择主列表中的某个选项时,在其他的从属列表中显示相关的选项.你可以通过eXtensible Markup Language(XML)的数据岛(data islands)来实现这一功能,把XML内嵌到你的HTML中.这一结果对在客户端的XML应用具有实践意义. 假设你为一家名为"CheapPc"的

用XML数据岛解决用户界面问题 - 2

xml|解决|数据|问题 把处理过程移到客户端 当Web服务器返回网页后,所有进一步的操作处理都在客户端进行.我原先认为如果向客户端发送一个大的数据集会使程序的速度放慢.但后来我却发现一次性发送所有数据比在客户与服务器之间来回地进行数据交换快得多.唯一可被注意到的停顿只是在IE5的XML解析器读取数据时的一个短暂的初始化停顿. HTML文件本身包含有4个元素:一个保存州名数据的选择列表(主列表),XML数据,一个从属列表的div标记占位符,和两个脚本.当州名选择列表的选项发生变化时,第二个脚本就

用XML数据岛解决用户界面问题

xml|解决|数据|问题     从属列表问题(dependent list problem)"的问题时常被提出.问题时常出现于当你有两个以上的选择列表时,一个主列表有若干个选项,你希望当用户选择主列表中的某个选项时,在其他的从属列表中显示相关的选项.你可以通过eXtensible Markup Language(XML)的数据岛(data islands)来实现这一功能,把XML内嵌到你的HTML中.这一结果对在客户端的XML应用具有实践意义. 假设你为一家名为"CheapPc&qu

HTML中的XML数据岛记录编辑与添加

xml|数据 <HTML>  <HEAD><Title>HTML中的数据岛中的记录集</Title></HEAD>  <body bkcolor=#EEEEEE text=blue bgcolor="#00FFFF">  <Table align=center width="100%"><TR><TD align="center">  &l