http://blog.csdn.net/guoguo1980/article/details/1221896

XSLT如何转换XML

我们打个有趣的比方,你玩过橡皮泥吧,用不同的模子按上去,就可以做出需要的形状。如果我们假设XML数据文档是一块大橡皮泥,XSLT就象是一个模子,用力一按,就做出需要的形状来---符合不同需要的HTML文档。

具体看下面的过程示意图:

我们将XML原文档输入,用XSL作为模板,通过转换引擎,最终输出需要的HTML文档。其中的转换引擎就是比喻中"用力一按"的过程。在具体应用中,有专门的软件来实现这个转换过程,名为XML Processor。目前已经有很多 Processor 软件(下面将详细提到),在IE5.5中也已经内嵌了XML Processor。

一个实例

现在我们来看一个简单的XSLT实际应用例子,获得一些感官上的认识。很多网页设计师看到类似HTML的代码才会放心,代码是那样的亲切和熟悉。

例子1: "Hello, world!"

hello world作为第一个教程已经是程序语言中的惯例了。我们也遵守这个惯例,看看如何利用XSLT来显示"hello world"。虽然这个例子没有什么实际用途,但是请大家不要急,后面还有更详细的例子。

第一步:建立要输入XML文档hello.xml。

<?xml version="1.0" encoding="iso-8859-1"?>
<greeting>Hello, world!</greeting>

这是一个很简单XML文档,只包含一个节点的XML结构树。

第二步:建立XSLT文档hello.xsl。提示:默认的XSLT文件的后缀名为.xsl。

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<head>
<title>First XSLT example</title>
</head>
<body>
<p><xsl:value-of select="greeting"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

你现在可以用IE5.0以上版本浏览器打开这个hello.xsl文件,看到XSL的结构树。

第三步:在XML中调用这个XSL文件。修改hello.xml的代码为:

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="hello.xsl"?>
<greeting>Hello, world!</greeting>

OK,到这一步原理上已经完成了所有的代码,接下来只要用一个XSLT的处理器(XML Processor)来执行hello.xml就可以看到"hello world"的显示结果了。流行的处理器软件有以下几种:

有网友要问,我想在浏览器中看到"hello world"的效果应该怎么做?在微软的IE5.5内嵌了MSXML3解释器,你可以用IE5.5打开hello.xml文件,就可以看到结果。如果只看到XML结构树,不是单独的"hello world"字样,说明你的浏览器没有安装MSXML3版本。

如果没有安装又想看效果怎么办?那还是用我们在XML教程中的老办法,采用JS实现。(这已经超出了本文要讲的范围,但为了更加直观,便于理解,我们在这里提供实例代码。)下面是一种实现的代码,可以保存为hello.htm,和上面的hello.xml,hello.xsl放在同一目录下面。最后用IE5.0以上版本打开hello.htm就可以看到效果了。

<html>
<head>
<script language="JavaScript" for="window" event="onload">
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("hello.xml");
nodes = xmlDoc.documentElement.childNodes;
greeting.innerText = nodes.item(0).text;
</script>
<title>First XSLT Example</title>
</head>
<body>
<span id="greeting"></span><br/>
</body>
</html>

过程解析

如果你成功的看到效果,你也许想知道这些代码的具体含义,我们来详细解说hello.xsl文件

<?xml version="1.0" encoding="iso-8859-1"?>
这是标准的XML文档的首行代码,因为XSLT本身也是XML文档。
encoding属性用来定义文档使用的编码形式,iso-8859-1主要支持西欧和北美的语言编码。
如果你想使用简体中文,那么就应该写成:
<?xml version="1.0" encoding="GB2312"?>
接下去的代码是:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
这是标准的XSLT文件首行代码。xsl:stylesheet代码的意思是将文档作为一个样式表来(stylesheet)处理。
xmlns:xsl属性是一个名字空间声明,和XML中的名字空间使用方法一样,用来防止元素名称重复和混乱。
其中前缀xsl的意思是文档中使用的元素遵守W3C的XSLT规范。
最后的version属性说明样式表只采用XSLT 1.0的标准功能,这也是目前仅有的标准。
<xsl:template match="/">
一个<xsl:template>元素定义一个模板规则。属性match="/"说明XML源文档中,这个模板规则作用的起点。"/"是一种XPath语法,我们在后面将详细讲述,这里的"/"代表XML结构树的根(root)。
接下去的代码是:
<html>
<head>
<title>First XSLT Example</title>
</head>
<body>
<p><xsl:value-of select="greeting"/></p>
</body>
</html>
说明:当模板规则被触发,模板的内容就会控制输出的结果。例子中,模板大部分内容由HTML元
素和文本构成。只有<xsl:value-of>元素是XSLT语法,这里<xsl:value-of>的作用是拷贝原文档中的
一个节点的值到输出文档。而select属性则详细指定要处理的节点名称。这是XPath语法,"greeting"
的意思就是寻找根节点名为greeting的元素,并用模板来处理这个节点。具体的就是找到<greeting>
元素,然后将元素的值"hello world"按模板样式拷贝到输出文件。
提示:由于XML文档是严格的层级结构(用IE5查看XML文件,会看见XML文档类似多级关联菜单),
所以我们形象的称XML文档为文档树,其中每一对元素称作树的一个节点。根元素就是根节点。
最后关闭所有元素:
</xsl:template>
</xsl:stylesheet>

好,例子解说完毕。你是否想过为什么要用这么复杂的方法来显示"hello world"呢?关键不在表面,而在于实质:用这种方法,hello world可以从XML文档中被提取出来,并用各种不同的XSLT模板处理,来输出不同需求的文档。我们来看看XSLT的主要用途:

XSLT的用途

XSLT的主要用途就是数据转换应用。

由于以XML为基础的电子商务广泛普及,XSLT作为数据转换的角色也越来越重要。例如直接将电视新闻的数据格式转换成报纸新闻需要的数据格式;将股票数据直接转换成图片显示在网页上;对EDI(电子数据交换)数据进行统计,排序等等。

XSLT是处理类似工作的理想工具。

XSLT简单教程--XSLT的实例相关推荐

  1. java链接打印机,热敏式的打印机ESC打印,Socket链接,打印简单教程实例,Gprinter

    公司突然要把小单打印功能放到后台,不像以前那样直接页面打印就可以了,还弄热敏式打印机. 没办法,只好去网上查下,发现使用起来还是蛮简单的,就是样式不好控制,给大家发个实例和简单教程,方便大家使用 先是 ...

  2. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  3. wcf简单教程(10) ajax调用,wcf简单教程(10) ajax调用

    wcf简单教程(10) ajax调用 [2021-02-11 16:23:59]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...

  4. jax-ws cxf_Apache CXF – JAX-WS –简单教程

    jax-ws cxf 许多Java开发人员都认为Web Service实现的任务艰巨-好吧,没有人能真正责怪他们,尤其是在企业应用程序开发的多年中,这给开发和设计带来了很多复杂性. 对于某些人来说,了 ...

  5. Apache CXF – JAX-WS –简单教程

    许多Java开发人员认为Web Service实现的任务艰巨-没人能真正责怪他们,尤其是在企业应用程序开发的多年中,这给开发和设计带来了很多复杂性. 对于某些人来说,了解它是构建完整的企业应用程序的下 ...

  6. 一个简单的EJB-Session Bean实例

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一个简单 ...

  7. OpenGL ES 简单教程

    OpenGL ES 简单教程 2014-04-24 13:35 佚名 apkbus 字号:T | T 什么是OpenGL ES?OpenGL ES (为OpenGL for Embedded Syst ...

  8. 【微信小程序系列】微信小程序超简单教程,基本语法,获取用户基本数据信息,实现对云数据库的增删改查及小程序外部api的引用示例(附源码)

    [微信小程序系列]微信小程序超简单教程 小程序项目结构 静态页面的构成 HTML:结构 css:样式 js:行为 小程序 页面全部存放在pages, 而且pages目录只能存放页面 页面包括4个文件, ...

  9. spring框架教程 Spring开发实例 spring mvc视频教程下载

    基于SpringMVC.MyBatis.FreeMarker架构实战CMS大型门户网站(自定义模板) spring框架教程 Spring开发实例 spring mvc视频教程下载地址: http:// ...

最新文章

  1. 正则表达式知识详解(转自晴天碧日)
  2. css 入场动画_React系列十四 React过渡动画
  3. Redis常用命令及命名规范
  4. Java基础知识编写一个HelloWorld案例
  5. [福大软工] Z班 软件工程实践总结 作业成绩
  6. Failed to connect to Etherscan API at url https://api-rinkeby.etherscan.io/api
  7. Sql Prompt使用技巧
  8. csr驱动程序linux版,CSR8510蓝牙驱动下载
  9. 用matlab s函数 阶梯,Matlab S函数使用介绍
  10. isp邮件服务器是什么,与ISP企业邮箱共建邮件服务器
  11. 世界观--哲学--抽象--虚无
  12. android x86_646,雷电模拟器4.0x86_64位版本即android 7.1 xposed安装
  13. 牛客NC23053月月查华华的手机 题解(指针优化)
  14. HarmonyOS上玩“语音识别”
  15. 华为python自动化测试框架_华为五年自动化测试工程详细解说:unittest单元测试框架...
  16. JavaScript 中 let 的使用
  17. 计算机一直显示配置更新失败怎么办,win10电脑windows更新失败怎么办?更新失败却一直在更新...
  18. Json格式的数据集标签转化为有效的txt格式(data_coco)
  19. 【TensorFlow2.0】如何搭建网络模型?
  20. NC 登录时,报“java.lang.reflect.UndeclaredThrowableException:null”错误

热门文章

  1. iOS之深入解析静态库和动态库
  2. POJ 3981.字符串替换
  3. 309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期
  4. 2011年第二届蓝桥杯决赛 —— C语言本科 —— 第一题
  5. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车黑线循迹红外避障综合实验
  6. 【Qt】Qt5.9编译MySQl5.7驱动
  7. 【Linux网络编程】Linux多播问题(No such device)解决方法
  8. linux中cd命令及范例,15个Linux中的“cd”命令的实际示例
  9. java结束全部操作代码_Java基本的线程操作(附代码)
  10. 【HDU 1276】士兵队列训练问题(两个队列模拟)