使用 XSLT 解释 XML 文件
来源:快乐笛子的博客 发布时间:2009-03-08 19:06:00
标签:xslt,xml,文件,浏览器
我们平常用 IE 打开一个普通的本地 xml 文件,其形式通常都是如下图:
默认样式看得多了就不觉得有什么特别。但对于少接触 xml 的人来说,上图还是有很多疑问之处。比如,为什么有加减号?为什么IE会弹出安全警告?为什么标签是这种棕赤色并且数据都是加粗的黑色?
诸如此类的问题,在学习 XSLT 之前,确实不好回答。
XSLT 被定义为 XML 转换器的角色,专门负责把 XML 数据转换为其他形式的数据,最常见的就是转换为 HTML 代码。 这里有 W3C 的 XSLT1.0 详细文档,我就不赘述了,下面是利用 XSLT 的规则,把上面的 XML 文档按照 IE 的默认样式,也来展示一遍。
为了体现与 IE 默认样式的不同,特意画蛇添足地加上勾选框。至于为什么会IE的有安全警告,那是因为需要在本地执行 JavaScript 语句,浏览器不能判定这些脚本是否带来恶意攻击,就默认关闭脚本解释引擎并给出警告。因为上图的加减号我增加了展开与收缩的事件。
因为上例的 XSLT 并不单独针对某个 xml 数据制作,因此把上面的 XSLT 作用与其他 XML 也有同样的效果,即通用的 xml 解释器!(呵呵,言重了,因为该 XSLT 文件并没有解释节点的属性)
由于 XML 可以具有树形结构,因此遍历节点就必须用到递归方法,XSLT 本身是支持递归的,这也是本例的关键之处:
<xsl:template name="TreeHTML">
<xsl:param name="x" />
<li>
<xsl:choose>
<xsl:when test="count($x/*)>0">
<a href="javascript:void(0)" onclick="switchSubNode(this)">-</a><input type="checkbox" /><em><</em><span><xsl:value-of select="name($x)"/></span><em>></em>
<ul>
<xsl:for-each select="$x/*">
<xsl:call-template name="TreeHTML">
<xsl:with-param name="x" select="." />
</xsl:call-template>
</xsl:for-each>
</ul>
<em><</em><span>/<xsl:value-of select="name($x)"/></span><em>></em>
</xsl:when>
<xsl:otherwise>
<a href="javascript:void(0)" onclick="switchSubNode(this)">-</a>
<xsl:choose>
<xsl:when test="string-length($x)>0">
<em><</em><span><xsl:value-of select="name($x)"/></span><em>></em><strong><xsl:value-of select="$x" /></strong><em><</em>/<span><xsl:value-of select="name($x)"/></span><em>></em>
</xsl:when>
<xsl:otherwise>
<em><</em><span><xsl:value-of select="name($x)"/></span> /<em>></em>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
0
投稿
猜你喜欢
- 如何在约定时间显示特定的提示信息?<%Function Greeting()
- 昨天ie8正式发布了,偶也去下载了一个,感觉很爽, 还在美的时候,突然发现很多网页都出问题,更可气的是自己的网站编辑器eWebEditor也
- 现在大家都在讨论Web2.0 ,大家都在搞用户行为前端设计,现在注册一个ID一般只需要几秒钟,站长期望其产生高价值的UGC,形成一个只需要审
- Opera所属:挪威Opera Software ASA公司渲染引擎:自家的PrestoOpera起初是一款挪威Oper
- 如何在页面中实现对电子信箱的访问?emaile.htm<HTML><HEAD><META NAME=
- 上次在blueidea上看到一个元素圆角的实现方法,但是那个太复杂了。于是就自己写了一个函数,可以将元素自动圆角,如div层,表格等。共有四
- 在ASP中,如何创建DSN? 见下:<HTML><HEAD><META&n
- 一、介绍这篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行。虽然这
- 数字函数 ABS():求绝对值。 CEILING():舍入到最大整数。 FLOOR():舍入到最小整数。 ROUND():四舍五入 ROUN
- 起源:.clearfix:after {visibility: hidden;display: block;font-size: 0;con
- 有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错
- 最近Google Code推出了一个面向网站开发者的 * Google DocType。它来自于网站开发者同时又面
- 上一篇相关文章:段正淳的css笔记(2)圆角的做法 1、标题右侧“更多”的实现曾经做上图所示的效果,会使用到position来相对定位到h2
- 近日无事,想起以前曾打算过要做一个定时重启或关机的工具,便花了一点时间以hta的形式写了个,名为"Windows Timer&qu
- 下面是一份在 HTML 4 Strict 和 XHTML 1.0 Strict 下必须遵守的标签嵌套规则,比如你不能在 <a>
- 三、支持XML的公司和它们的开发工具 尽管XML还处在开发阶段,其标准正在由W3C组织制定,但是已经有许多公司表示全力支持XML,并开发了不
- 1.intersect为取多个查询结果的交集;2.查询两个基本时间段内表记录的SQL语句;select * from shengjibiao
- HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容
- 在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方式进行阐述。在这
- 最近很少写CSS了,以后也可能写的会很少了,所以还是想把自已的一些经验能和大家分享一下,希望能给大家一些帮助!这篇文章主要写的提高网页在客户