使用 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>


猜你喜欢
- Django项目要操作数据库,首先要和数据库建立连接,才能让程序中的数据和数据库关联起来进行数据的增删改查操作Django项目默认使用mys
- Pytorch expand()的使用有两点需要注意,无论是 expand() 还是 expand_as():1.只能在第0维扩展一个维数,
- 1.init 函数简介Golang init 函数是一种特殊的函数,主要用于完成程序的初始化工作,如初始化数据库的连接、载入本地配置文件、根
- 前言随着网站的内容的增多和用户访问量的增多,网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,,我们往往需要在此时对我们的网站
- 最近无意看到网上有人使用Python编写几十行代码生成图像验证码,感觉很是繁琐,这里为各位朋友推荐两种方法,使用4行Python代码即可生成
- 例如:preds = to_numpy(preds)#preds是[2985x16x2]preds = preds.transpose(2,
- 由于Maui Blazor中界面是由WebView渲染,所以再使用Android的摄像头时无法去获取,因为原生的摄像头需要绑定界面组件所以我
- 尽量避免使用DOM。当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用。使用设置innerHTML的方法来替
- 这是《python基础教程》后面的实践,照着写写,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的
- 一.图像加法运算1.Numpy库加法其运算方法是:目标图像 = 图像1 + 图像2,运算结果进行取模运算。当像素值<=255时,结果为
- 一、HACK以下两种方法几乎能解决现今所有HACK。1, !important 随着IE7对!important的支持, !imp
- PHP PDO 事务与自动提交现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的。事务支持四大特性(ACID
- 一、设置开启SMTP服务并获取授权码0.如果使用第三方邮件服务器SMTP服务来发送邮件,首先要在邮箱设置里面开启POP3/SMTP/IMAP
- 1. 二维(多维)数组降为一维数组方法1: reshape()+concatenate 函数,这个方法是间接法,利用 reshape() 函
- 在之前一篇文章里尝试了跨浏览器的数据共享,最后提到使用LocalConnection还可以实现跨浏览器消息交互的可行性。花了两个晚上简略的研
- 1. 特定版本的python-opencv安装在https://www.lfd.uci.edu/~gohlke/pythonlibs/#op
- 代码如下:use tempdb if object_id('tempdb..#table') is not null dro
- 在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误)。这时候断言assert 就显得非常有用。python as
- 本文实例讲述了JS模拟实现哈希表及应用。分享给大家供大家参考,具体如下:在算法中,尤其是有关数组的算法中,哈希表的使用可以很好的解决问题,所
- 在处理图像的时候经常是读取图片以后把图片转换为灰度图。作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法。首先导入包:import nu