使用 XSLT 解释 XML 文件

来源:快乐笛子的博客 时间:2009-03-08 19:06:00 

我们平常用 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>&lt;</em><span><xsl:value-of select="name($x)"/></span><em>&gt;</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>&lt;</em><span>/<xsl:value-of select="name($x)"/></span><em>&gt;</em> 
</xsl:when> 
<xsl:otherwise> 
<a href="javascript:void(0)" onclick="switchSubNode(this)">-</a> 
<xsl:choose> 
<xsl:when test="string-length($x)>0"> 
<em>&lt;</em><span><xsl:value-of select="name($x)"/></span><em>&gt;</em><strong><xsl:value-of select="$x" /></strong><em>&lt;</em>/<span><xsl:value-of select="name($x)"/></span><em>&gt;</em> 
</xsl:when> 
<xsl:otherwise> 
<em>&lt;</em><span><xsl:value-of select="name($x)"/></span> /<em>&gt;</em> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:otherwise> 
</xsl:choose> 
</li> 
</xsl:template>

例子下载 | 直接访问

标签:xslt,xml,文件,浏览器
0
投稿

猜你喜欢

  • 兼容主流浏览器的【表情插入】源码

    2010-07-02 13:02:00
  • Windows下安装Django框架的方法简明教程

    2021-06-26 20:26:13
  • Golang实现请求限流的几种办法(小结)

    2024-05-05 09:32:09
  • Python常用断言函数实例汇总

    2023-07-04 18:15:23
  • Python如何执行系统命令

    2021-09-25 05:49:02
  • 计算Python Numpy向量之间的欧氏距离实例

    2022-08-14 08:21:56
  • Python超越函数积分运算以及绘图实现代码

    2021-04-07 09:41:45
  • OpenCV中resize函数插值算法的实现过程(五种)

    2021-07-09 21:05:24
  • SQL Server本地时间和UTC时间的相互转换实现代码

    2024-01-21 06:35:33
  • 轻松实现javascript数据双向绑定

    2024-03-26 20:23:50
  • Python标准库sched模块使用指南

    2022-09-20 12:19:06
  • flask上传作品之dbm操作的实现

    2022-06-29 15:25:41
  • Navicat远程连接SQL Server并转换成MySQL步骤详解

    2024-01-14 20:58:48
  • go中string、int、float相互转换的实现示例

    2024-04-28 09:14:19
  • 一直闪烁变色的超级链接代码

    2008-02-27 13:08:00
  • MySQL由浅入深探究存储过程

    2024-01-14 09:43:04
  • ASP.NET MVC实现区域或城市选择

    2023-07-13 17:50:00
  • python使用递归解决全排列数字示例

    2022-02-22 04:14:49
  • Python使用Matplotlib绘制三维散点图详解流程

    2023-09-17 13:36:59
  • vuex mutations的两种调用方法小结

    2024-04-27 16:11:42
  • asp之家 网络编程 m.aspxhome.com