以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XML基础 』 (http://bbs.xml.org.cn/list.asp?boardid=1) ---- 利用DSO和javascript在html中动态加载和浏览xml数据[原创] (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=54854) |
-- 作者:hongjuesir -- 发布时间:11/3/2007 10:06:00 PM -- 利用DSO和javascript在html中动态加载和浏览xml数据[原创] 1.DSO也叫做数据源对象,IE 4.0引入了DSO,在IE 5.0对DSO技术进行很大的扩展。以往如果数据是通过SQL语言对数据库进行查询得到的结果,那么就把它们存放在ADO(ActiveX Data Objects)记录集中。服务器把这种ActiveX控件(通常是ADO记录集)发送到客户端,由客户端脚本程序做进一步的处理。实际上,IE 5.0就是把XML数据岛作为一种特殊的ADO记录集进行处理的。在这里,你把它想像成数据库,而IE则是与数据库联系的客户端。或许大家还记得asp中的recordset,那么在这里DSO对象也是一个recordset,只不过它不在服务器脚本中操作,而是在javascript中操作。 附两个以下用到的xml文档: <?xml version="1.0" encoding="gb2312"?> b.ClassData.xml <?xml version="1.0" encoding="gb2312"?> <XML id="stuData" src="DsoData.xml"></XML> 可要记住它的id,这个id是可以自定义的,它是在javascript中操作的标示,有点类似与asp.net的服务器控件啊。 3.如果你只想当在html中激发某个事件时才加载xml数据,那么你首先需要在html中放置一个DSO的容器,以便用来存放xml数据。 <object id="ClassData" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39" 这里这个id的意义和上面的一样。如果要加载多个xml,那么你就要放置多个这样的标签。 4.那么在javascript中怎么加载呢? 注意这个ClassData.XMLDocument的ClassData实际上是前面放置的标签<object id="ClassData" 中的id。这和asp.net的服务器控件多么像。 5.怎么把这些数据源中的数据展示到html中呢? a.绑定到table中,请看下面的代码: <table width="80%" datasrc="#stuData" border="1" cellspacing="0" cellpadding="0"> 这里大家重点关注以下两个标签: 一个是datasrc,它表明该table使用哪个数据源,后面是"#stuData",这个#是一个标示,后面呢则是<XML id="stuData" 中的id,表明table用的是这个数据源。而datafld表明它绑定的是xml文档中元素名。如果遇到属性名和子元素名一样的情况,在元素名前加上“!”进行区分。 绑定的方法类似,关键是指定以上两个属性。 6.仅仅是只能绑定,肯定是不够灵活的,而javascript确可以让我们灵活的展现它们。因为DSO是一个类似于recordset的对象,那么它就有: · moveNext(): 指向后一个数据项。 · movePrevious(): 指向前一个数据项。 · moveFirst(): 指向第一个数据项。 · moveLast(): 指向最后一个数据项。 · EOF: 这个属性用来检测我们是否已经到达数据记录的底部。 具体的操作代码如下: var theSet = ClassData.recordset; 那么在html中绑定了数据的非table标签,如单独的span标签,那么就会随着moveNext而变化,在这点上,table就像asp.net中的gridView,而只绑定单值的就是detailView。这时候你一不小心,还以为是和服务器在交互呢。 除此之外,还能使用变量对这个recordset中的值取出,如: var theName = theSet("name"); 当然你也可以通过: document.getElementById("###").innerHTML=theSet("name"); 显示到指定的位置。 还有获取记录集中的个数: 7.还可以对记录集进行快速查询、排序、编辑等操作。还有对这个recordset中的记录进行增加删除修改,也是同样有效的。只是你别期望能修改xml文件,原因就不用我讲了。这些具体操作的办法和asp中的recordset对象都是相似的。 8.对于xml+DSO,其实我们可以把它看作是一个分布式的离线数据库,可以首先一次性从服务器端下载客户端操作所需的xml数据,然后通过DSO进行操作,这中间的业务便不需要与服务器端交互了,而是等都操作完毕了,再可以一次性提交到服务器端。这就有点像.net中的dataset了。不过这个暂时只是我的一个想法,存在的问题肯定也是有的。 附:html中的代码 <!-- Author:hongjuesir@gmail.com Share happily !--> <title>DSO示例</title> var xmlDoc; function loadXml2Dso() · moveFirst(): 指向第一个数据项。 · moveLast(): 指向最后一个数据项。 · EOF: 这个属性用来检测我们是否已经到达数据记录的底部。*/ } <XML id="stuData" src="DsoData.xml"></XML> <object id="ClassData" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39" <body> <p> <table datasrc="#ClassData" border="1"> <p> <div> </body> |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |