380 likes | 577 Views
第6章 DSO. 6.1 DSO 简介 6.2 使用 DSO 显示记录 6.3 使用 DSO 显示属性 6.4 使用 DSO 显示图像元素 6.5 DSO 与 VBScript. 6.1 DSO 简介. DSO : Data Source Object, 数据源对象 Data Island : 数据岛 原理: 将 XML 文档数据当成类似数据库的记录集,然后用操作数据库的方法来显示 XML 文档。 要求: XML 文档每个元素有相同的结构,子元素数目、类型必须完全相同。. 6.1 DSO 简介. 使用 DSO 步骤:
E N D
第6章 DSO 6.1 DSO简介 6.2 使用DSO显示记录 6.3 使用DSO显示属性 6.4 使用DSO显示图像元素 6.5 DSO与VBScript
6.1 DSO简介 • DSO:Data Source Object,数据源对象 • Data Island: 数据岛 • 原理:将XML文档数据当成类似数据库的记录集,然后用操作数据库的方法来显示XML文档。 • 要求:XML文档每个元素有相同的结构,子元素数目、类型必须完全相同。
6.1 DSO简介 • 使用DSO步骤: • 文档绑定:将XML文档绑定到HTML文档。 • 元素链接:将XML元素链接到HTML元素,比如span或table等 • 显示:通过显示html元素自动显示XML元素
6.1.1 文档绑定 • 内部数据岛:在HTML文档中直接包含XML文档内容。 <XML ID="数据岛名"> … XML文档放在此处 </XML> • 外部数据岛:在HTML文档中包含XML文件名。XML文档中的CSS或XSL不起作用。 <XML ID="数据岛名" SRC="XML文档名"> </XML>
6.1.2 元素链接 • 与Table链接显示多条记录: <TABLE DATASRC="#数据岛名"> </TABLE> • 与SPAN链接显示单一记录: <SPAN DATASRC="#数据岛名",DATAFLD="元素名"> </SPAN > • 与DIV、BUTTON链接:可绑定的HTML元素见p156表6-1。
6.2 使用DSO显示记录 • 例1:显示单一记录,student.htm。 • 步骤1:外部数据岛选择students.xml,名字取作students, <XML ID="students" SRC="students.xml"> </XML> • 步骤2:与SPAN链接显示单一记录, <SPAN DATASRC="#students" DATAFLD="元素名"> </SPAN >
6.2 使用DSO显示记录 • 例1:显示单一记录,student.htm <html><body> <XML ID="students" SRC="students.xml"></XML> <span datasrc="#students" datafld="name"></span><br> <span datasrc="#students" datafld="origin"></span> <br> <span datasrc="#students" datafld="age"></span> <br> <span datasrc="#students" datafld="telephone"> </span> </body></html>
6.2 使用DSO显示记录 • 例1运行效果:双击student.htm
6.2 使用DSO显示记录 • 例2:显示多条记录,students.htm • 步骤1:外部数据岛选择students.xml,名字取作students, <XML ID="students" SRC="students.xml"> </XML> • 步骤2:与Table链接显示多条记录, <TABLE DATASRC="#students" border=1> • 步骤3:每条记录用span显示,其中的datasrc可以省略。 <SPAN DATASRC="#students" DATAFLD="元素名"> </SPAN >
6.2 使用DSO显示记录 • 例2:显示多条记录,students.htm <html><body> <XML ID="students" SRC=students.xml></XML> <TABLE DATASRC="#students" border=1> <CAPTION>学生花名册</CAPTION> <THEAD><TH>姓名</TH><TH>籍贯</TH> <TH>年龄</TH><TH>电话</TH></THEAD> <TR><TD><span datafld="name"></span></TD> <TD><span datafld="origin"></span> </TD> <TD><span datafld="age"> </span></TD> <TD><span datafld="telephone"></span></TD> </TR></TABLE></body></html>
6.2 使用DSO显示记录 • 例2运行效果:双击students.htm
6.2 使用DSO显示记录 • 例3:分页显示多条记录,student_pages.htm • 步骤1:外部数据岛选择students.xml,名字取作students, <XML ID="students" SRC="students.xml"> </XML> • 步骤2:与Table链接显示多条记录,Table要取一个名字StudentTable,指定每页记录数datapagesize="2" <TABLE ID="StudentTable " border=1 DATASRC="#students" datapagesize="2">
6.2 使用DSO显示记录 • 步骤3:每条记录用span显示,其中的datasrc可以省略。 <SPAN DATASRC="#students" DATAFLD="元素名"> </SPAN > • 步骤4:使用HTML的button控件,配合VBScript调用DSO的分页方法。
6.2 使用DSO显示记录 • 例3:分页显示多条记录,student_pages.htm <html><head> <script language=VBScript> Sub a StudentTable.firstpage() End Sub Sub b StudentTable.previouspage() End Sub Sub c StudentTable.nextpage() End Sub
6.2 使用DSO显示记录 • 例3续1:分页显示多条记录,student_pages.htm Sub d StudentTable.lastpage() End Sub </script></head><body> <XML ID="students" SRC=students.xml> </XML> <input type=button value="第一页" onclick=a> <input type=button value="前一页" onclick=b> <input type=button value="后一页" onclick=c> <input type=button value="最后一页" onclick=d> <br><br>
6.2 使用DSO显示记录 • 例3续2:分页显示多条记录,student_pages.htm <TABLE ID="StudentTable" DATASRC="#students" border=1 datapagesize="2"> <CAPTION>学生花名册</CAPTION> <THEAD> <TH>姓名</TH> <TH>籍贯</TH> <TH>年龄</TH> <TH>电话</TH> </THEAD>
6.2 使用DSO显示记录 • 例3续3:分页显示多条记录,student_pages.htm <TR> <TD><span datafld="name"></span></TD> <TD><span datafld="origin"><span></TD> <TD><span datafld="age"></span></TD> <TD><span datafld="telephone"></span></TD> </TR> </TABLE> </body></html>
6.2 使用DSO显示记录 • 例3运行效果:双击student_pages.htm
6.3 使用DSO显示元素属性 • 记录级元素属性:当作子元素处理,如在例1的student.htm中加上绿色一句,则读取属性class的值。本章前面的例子都没有显示class <html><body> <XML ID="students" SRC="students.xml"></XML> <span datasrc="#students" datafld="class"></span> <span datasrc="#students" datafld="name"></span> <span datasrc="#students" datafld="origin"></span> <span datasrc="#students" datafld="age"></span> <span datasrc="#students" datafld="telephone"> </span></body></html>
6.3 使用DSO显示元素属性 • 运行效果:双击student.htm,增加了班级
6.3 使用DSO显示元素属性 • 子元素字段属性: DSO处理时,将属性变成子元素,并增加子元素<$TEXT> </$TEXT>包含原来的内容 • 例子:修改students.xml,在<name>中增加属性sex:见文档students_sex.xml <name sex="女">李华</name> • DSO处理成: <name><sex>女</sex> <$TEXT>李华</$TEXT> </name>
6.3 使用DSO显示元素属性 • 使用嵌套table显示:student_sex.htm <html><body> <XML ID="students" SRC="students_sex.xml"> </XML> <span datasrc="#students" datafld="class"></span><br> <table datasrc="#students" datafld="name"> <tr><td><span datafld="$TEXT"></span></td> <td><span datafld="sex"></span></td></tr> </table> <span datasrc="#students" datafld="origin"></span> <br> <span datasrc="#students" datafld="age"></span> <br> <span datasrc="#students" datafld="telephone"> </span> </body></html>
6.3 使用DSO显示元素属性 • 运行效果:双击student_sex.htm,增加了性别
6.4 使用DSO显示图像元素 • 使用HTML的<img>标记:假定在students.xml中增加了元素 <picture>图片文件名</picture> 则在student.htm中增加语句如下 <img datasrc="#students" datafld="picture">
6.5 DSO与JavaScript/VBScript • 数据岛的recordset对象:包含数据岛XML文档所有的记录,可在JavaScript/VBScript中直接使用. • 数据岛的recordset对象的属性:BOF、EOF、value 数据岛.recordset.属性名 数据岛.recordset("子元素名").value • 数据岛的recordset对象的方法:moveFirst()、 movePrevious()、 moveNest() 、moveLast()、 move(±n)、addNew()、Delete() (注意大写D) 数据岛.recordset.方法名()
6.5 DSO与JavaScript/VBScript • Recordset对象的属性 • AbsolutePage:返回当前记录所在页面 • absolutePosition:返回当前记录的位置 • BOF:如果当前记录位置位于第一条记录之前,则返回true • cacheSize:返回本地缓存的记录数 • EOF:如果当前位置位于最后一条记录之后,则返回true • maxRecords:指定查询返回的最大记录 • pageSize:指定页面可以包含的记录数 • pageCount:返回记录集包含的数据页数 • recordCount:返回记录集中的记录数
6.5 DSO与JavaScript/VBScript • Recordset对象的方法 • addNew( )在记录集中添加一条记录 • Delete( )删除当前记录 • getRows( )读取记录并将其存储于数组中 • Move(n) 移动当前记录的位置 • moveFirst( )移动到第一条记录 • moveLast( )移动到最后一条记录 • movePrevious( )移动到上一条记录 • moveNext( )移动到下一条记录
6.5.1 使用DSO浏览XML文档 • 浏览students.xml:students_browse.htm <html><head> <script language=VBScript> Sub a students.recordset.moveFirst() End Sub Sub b students.recordset.movePrevious() If students.recordset.bof Then students.recordset.moveFirst() End If End Sub
6.5.1 使用DSO浏览XML文档 • 浏览students.xml续1:students_browse.htm Sub c students.recordset.moveNext() If students.recordset.eof Then students.recordset.moveLast() End If End Sub Sub d students.recordset.moveLast() End Sub </script></head>
6.5.1 使用DSO浏览XML文档 • 浏览students.xml续2:students_browse.htm <body> <XML ID="students" SRC=students.xml></XML> <span datasrc="#students" datafld="name"></span><br> <span datasrc="#students" datafld="origin"></span><br> <span datasrc="#students" datafld="age"></span><br> <span datasrc="#students" datafld="telephone"></span><br> <input type=button value="第一个" onclick=a> <input type=button value="前一个" onclick=b> <input type=button value="后一个" onclick=c> <input type=button value="最后一个" onclick=d> </body></html>
6.5.1 使用DSO浏览XML文档 • 运行效果:双击student_browse.htm,
6.5.2 使用DSO编辑查询XML文档 • 编辑浏览students.xml:students_browse_edit.htm <html><head><script language=VBScript> Sub a students.recordset.moveFirst() End Sub Sub b students.recordset.movePrevious() If students.recordset.bof Then students.recordset.moveFirst() End If End Sub
6.5.2 使用DSO编辑查询XML文档 • 编辑浏览students.xml续1:students_browse_edit.htm Sub c students.recordset.moveNext() If students.recordset.eof Then students.recordset.moveLast() End If End Sub Sub d students.recordset.moveLast() End Sub
6.5.2 使用DSO编辑查询XML文档 • 编辑浏览students.xml续2:students_browse_edit.htm Sub e students.recordset.addNew() students.recordset.movePrevious() End Sub Sub f students.recordset.Delete() End Sub
6.5.2 使用DSO编辑查询XML文档 • 编辑浏览students.xml续2:students_browse_edit.htm Sub g students.recordset.moveFirst() Do While Not students.recordset.EOF If find.value=students.recordset("name").value Then Exit Do End If students.recordset.moveNext() Loop End Sub </script></head>
6.5.2 使用DSO编辑查询XML文档 • 编辑浏览students.xml续3:students_browse_edit.htm <body> <XML ID="students" SRC=students.xml></XML> <input type=text datasrc="#students" datafld="name"><br> <input type=text datasrc="#students" datafld="origin"><br> <input type=text datasrc="#students" datafld="age"><br> <input type=text datasrc="#students" datafld="telephone"><br> <br>
6.5.2 使用DSO编辑查询XML文档 • 编辑浏览students.xml续4:students_browse_edit.htm <input type=button value="第一个" onclick=a> <input type=button value="前一个" onclick=b> <input type=button value="后一个" onclick=c> <input type=button value="最后一个" onclick=d> <br> <input type=button value="添加" onclick=e> <input type=button value="删除" onclick=f> <br><input type=text name=find><br> <input type=button value="查询姓名" onclick=g> </body></html>
6.5.2 使用DSO编辑查询XML文档 • 运行效果:双击student_browse_edit.htm,注意结果在内存中,XML文档未改变。