|
现在有点懒,有阵子没写文章,排名都不见踪影,来来来,xml第五次课时--数据源对象(DSO). XML DSO 就是一个Microsoft ActiveX控件,嵌入到Microsoft Internet Explorer中.DSO有助于格式化数据并将这些数据显示在HTML页面上.使用DSO,就可以从外部XML文档或从嵌入在HTML文档的XML数据中提取数据.当然这是微软一个控件而已,当然只适合用于它的IE浏览器,而对于其它浏览器则不太支持,所以用的不是挺多. OK,不管怎样,还是来讲个实例. 先还是一个XML文档,代码如下: 取名为(student.xml) <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="MyStudentStyle.xsl"?> <StudentInfo> <student id="101"> <name>张三</name> <sex>男</sex> <age>20</age> <score>59</score> </student> <student id="102"> <name>李四</name> <sex>女</sex> <age>18</age> <score>70</score> </student> <student id="103"> <name>王五</name> <sex>男</sex> <age>21</age> <score>65</score> </student> <student id="104"> <name>赵六</name> <sex>男</sex> <age>22</age> <score>86</score> </student> <student id="105"> <name>陈七</name> <sex>女</sex> <age>20</age> <score>90</score> </student> </StudentInfo>
样式文档,还是初入四中的代码,差不多,如下: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/">
<html> <head> <title>学生信息表</title> </head> <body>
<h2 align="center">学生信息表</h2> <table align="center" border="1"> <tr> <th>学生学号</th> <th>学生姓名</th> <th>学生性别</th> <th>学生年龄</th> <th>学生得分</th> <th>老师评价</th> </tr> <xsl:for-each select="StudentInfo/student"> <xsl:sort order="ascending" select="@id" data-type="number"> </xsl:sort> <tr> <xsl:if test="sex='女'"> <xsl:attribute name="bgcolor">lightgreen</xsl:attribute> </xsl:if> <td><xsl:value-of select="@id"></xsl:value-of></td> <td><xsl:apply-templates select="name"></xsl:apply-templates></td> <td><font><xsl:if test="sex='女'"> <xsl:attribute name="color">blue</xsl:attribute> </xsl:if> <xsl:apply-templates select="sex"></xsl:apply-templates></font></td> <td><xsl:apply-templates select="age"></xsl:apply-templates></td> <td><xsl:apply-templates select="score"></xsl:apply-templates></td> <td><xsl:choose> <xsl:when test="score < 60">不及格</xsl:when> <xsl:when test="(score > 60 or score=60) and score < 70">及格</xsl:when> <xsl:when test="(score > 70 or score=70) and score < 80">中</xsl:when> <xsl:when test="(score > 80 or score=80) and score < 90">良好</xsl:when> <xsl:when test=" score > 90 or score=90">优秀</xsl:when> </xsl:choose></td> </tr> </xsl:for-each> <xsl:variable name="Count"> <xsl:value-of select="count(StudentInfo/student)"></xsl:value-of> </xsl:variable> <xsl:variable name="Sum"> <xsl:value-of select="sum(StudentInfo/student/score)"></xsl:value-of> </xsl:variable> <xsl:variable name="Avg"> <xsl:value-of select="round($Sum div $Count * 10) div 10"></xsl:value-of> </xsl:variable> <tr> <td colspan="5">学生人数</td> <td><xsl:value-of select="$Count"></xsl:value-of></td> </tr> <tr> <td colspan="5">总分数</td> <td><xsl:value-of select="$Sum"></xsl:value-of></td> </tr> <tr> <td colspan="5">平均分</td> <td><xsl:value-of select="$Avg"></xsl:value-of></td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>
OK,最后便是在HTML中的代码咯: <html> <head> <title>学生信息</title> </head> <xml id="student" src="student.xml"/> <xml id="student1" src="MyStudentStyle.xsl"/> <body onload="load()"> <input type="button" value="学号排序" onclick="change([url=mailto:]'@id','number')"> <input type="button" value="分数排序" onclick="change('score','number')"> <div id="MyID"/> </body> <script language="javascript"> var XMLDoc;<!--声明文档对象模型变量--> var CssStyle;<!--声明样式变量--> var sortSelect;<!--声明样式按什么排序的变量--> var sortType;<!--声明样式的类型变量--> function load() { XMLDoc=student.XMLDocument;<!--得到文档对象模型--> CssStyle=student1.XMLDocument;<!--得到样式对象模型,这里为什么使用student2对象呢?是因为在student.xml中首先用的是MyStudentStyle样式--> sortSelect=student1.selectSingleNode("*//xsl:sort/@select"); sortType=student1.selectSingleNode("*//xsl:sort/@data-type"); MyID.innerHTML=XMLDoc.transformNode(CssStyle);<!--改变接点--> } function change(name,type) { CssStyle=student1.XMLDocument; sortSelect.value=name; sortType.value=type; MyID.innerHTML=XMLDoc.transformNode(CssStyle); } </script> </html> 可以自如切换,根据不同的排序值与类型.效果如下:
 这是按下了"按分数排序"的按钮的效果,后面的试试. OK,完成.
|
一共有 1 条评论