博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web Services 应用开发学习笔记(四):XML显示—XSL
阅读量:5007 次
发布时间:2019-06-12

本文共 7024 字,大约阅读时间需要 23 分钟。

 
本文内容
  1.  引言
  2.  CSS级联样式表
  3.  XSL基础
  4.  XSL文档结构
  5.  XSL元素
  6.  XSLT
  
7.  XPath基础
  
8.  XPath表达式
  
9.  XPath定位路径
 

1.引言

下面是一个xml的文件,如果用浏览器直接打开,会是什么效果呢?

product.xml

模型飞机
适合于5岁以上儿童
239
20
电动汽车
适合4岁以上儿童
860
12

很显然,浏览器仅仅是作为一个xml文件的解析器,无法理解这些标记的含义,所以它就将文件原封不动的显示出来。嘿嘿!想要控制xml像web页面那样显示,就需要用到W3C推荐的样式表标准:CSS级联样式表XSL可扩展样式表

 

2.CSS级联样式表

CSS是一种文本文档,用于控制XML文档和HTML文档中的标签如何被格式化。简单点来说, 怎样去显示文档中的内容。

不过CSS与XML结合时存在局限性:

(1)CSS可以格式化XML文档,能够很好的控制输出的样式,比如色彩、字体、大小等,但只能静态控制文档的样式或外观

(2)CSS不能重新排序文档中的元素

(3)CSS不能动态判断和控制元素的显示

(4)CSS无法动态统计元素中的数据

至于CSS的语法规则这里不多说,可以去参考其他资料

那应该如何让XML与CSS关联起来呢?

在XML中通过xml-stylesheet指令引入CSS样式表,其语法格式如下:

(1)<?xml-stylesheet?>处理指令中的type属性是正在使用的样式表的类型。对CSS来说,其值是text/css,对XSL来说,则是text/xsl

(2)<?xml-stylesheet?>处理指令中的href属性值是一个URL,通常是相对值,指明在何处可找到样式表。如果样式表没有找到,Web浏览器很可能使用其缺省的样式表,此时浏览器可能会报告一条错误信息

现在我们引入product.css:

product.xml:

模型飞机
适合于5岁以上儿童
239
20
电动汽车
适合4岁以上儿童
860
12

product.css:

PRODUCTNAME {
font-family:Arial; font-size:20pt; font-weight:bold; color:red; display:block; padding-top:6pt; padding-bottom:6pt } PRICE,DESCRIPTION,QUANTITY {
font-family:Arial; font-size:12pt; color:teal; display:block; padding-top:3pt; padding-bottom:3pt }

浏览器效果:

 

3.XSL基础

如果说HTML与CSS是最佳搭档的话,那么XSL就是XML的就是天作之和了。先来看基本的定义

XSL(eXtensible Stylesheet Language)是一种基于XML的语言,是一种显示XML文件的规范,遵循XML的规范制定。

XSL实际上包含三种语言:

(1)XSLT是一种转换XML的语言,着重于XML文档转换

(2)XPath是一种用来访问XML文档不同部分或模式的语言,着重于从XML层次结构上访问结点

(3)XSLFO(XSL格式化对象)是一种定义XML显示方式的语言,着重于格式对象,作用就类似CSS在HTML中的作用 

 

4.XSL文档结构

XSL文档本身是格式良好的XML文档,在XSL文件的开头要有和XML文件相同的声明,XSL文档的标准格式如下

模板规则 输出模板

语法解析:

<xsl:stylesheet>既是XSL的声明语句,也是根元素,必须位于文件的首部,xsl是代表着stylesheet元素所属命名空间的前缀

例子:

student.xml:

李华
1988.12.12
92
Java
王燕
1989.9.10
89
Visual Basic
张磊
1987.9.9
98
UML
杨菲
1989.6.16
85
SQL Server

student.xsl:

学生成绩单

学生成绩单

姓名 性别 生日 成绩

浏览器效果:

5.XSL元素

根据上面的例子可以总结出元素的种类。
(1)<xsl:template>元素
模板(template)是XSLT中最重要的概念之一,模板由两部分组成:匹配模式(match pattern)和执行。
<xsl:template>元素的match属性,指定要将该模板应用于输入文档的哪些节点,match属性的值是一个XPath表达式

示例代码

模板匹配所有的name元素:

 
模板匹配所有的父节点为student元素的name元素:

 

(2)<xsl:value-of>元素 

使用<xsl:value-of>元素可用来取出XML文件中被选择的元素或属性的内容,语法格式如下:

 

(3)<xsl:for-each>元素

若想循环选择多条数据,可使用<xsl:for-each>元素。其语法格式如下:

 

(4)<xsl:sort>元素 

如需对结果进行排序,只需在XSL文件中的<xsl:for-each>元素内部添加一个<xsl:sort>元素即可。其语法格式如下:

 

(5)<xsl:if>元素

<xsl:if>类似普通程序语言的if条件语句,允许设定节点满足某个条件时,被模板处理。其语法格式如下:

(6)<xsl:choose>元素

如果需要进行多项选择,可以使用<xsl:choose>、<xsl:when>、<xsl:otherwise>系列流程控制语句,其语法格式如下:
... ...

 

(7)<xsl:apply-templates>元素 

<xsl:apply-templates>元素用来指示处理器发现一个合适的模板,并且在每个选择的元素上执行指定的任务,可以将其理解为程序中的子函数调用。其语法格式如下:
pselect属性用来定义确切的节点名称,是可选的,缺省值是“node()”,意味着对当前结点的所有子节点执行该模板
 

 6.XSLT

 XSLT(eXtensible Stylesheet Language Transformation)是一种用来转换XML文档结构的语言。

XSL的处理过程:

首先是根据XML文档构造源树,然后根据XSL规则将源树转换为结果树,生成结果树后,对其进行解释,格式化为一种适合显示、打印或是播放的格式。

XSLT和CSS的比较:

CSS

XSLT

使用简单

使用复杂

不能排序、添加或删除元素

可排序、添加或删除元素

不能访问文档除元素外的其它信息

能访问其它信息

使用内存比较少

使用较多内存和处理器能力

与XML语法不同

语法与XML相同

7.XPath基础

XPath就是一种专门用来在XML文档中定位和查找信息的语言,通过XPath可对XML文档中的元素和属性进行遍历,是高级XML应用的基础 。

 

XPath主要有四种数据类型:

(1)节点集

(2)布尔类型

(3)字符串类型

(4)数值类型

 

在XPath中,可以将节点划分为七种节点类型:

(1)根节点(Root Node)

(2)元素节点(Element Nodes)

(3)文本节点(Text Nodes)

(4)属性节点(Attribute Nodes)

(5)命名空间节点(Namespace Nodes)

(6)处理指令节点(Processing Instruction Nodes)

(7)注释节点(Comment Nodes)
 
XPath节点关系:
(1)父(parent)
(2)子(children)
(3)同胞(sibling)
(4)先辈(ancestor)
(5)后代(descendant)
 

8.XPath表达式

XPath将XML文档看作由节点构成的层次树,通过编写XPath表达式来定位树中特定的节点

XPath路径表达式: 

表达式

描述

nodename

选取此节点的所有子节点

/

从根节点选取,绝对路径,表示当前文档的根节点 

//

从任意节点选取,相对路径,表示当前文档所有的节点

.

选取当前节点

..

选取当前节点的父节点

@

选取属性

 

 例子:

RESTful Web Services
29.00
C#编程基础
46.00

解析:

bookstore 

选取 bookstore 元素的所有子节点

/bookstore

选取根节点bookstore元素

/bookstore/book/price

选取bookstore元素下所有book元素的所有price元素

/bookstore/book/*

选取/bookstore/book的所有子元素

bookstore/book

选取bookstore元素下所有的book子元素

//bookstore

选取文档中所有的bookstore元素,无论它在什么层次

bookstore//book

选取在bookstore元素下所有的book元素,无论它们位于bookstore之下的什么位置

/bookstore/*/price

选取bookstore的子元素中,包含有price作为子元素的元素

//*

选取文件中的所有元素

//@lang

选取所有名为 lang 的属性

 

谓语表达式:

路径表达式

描述

/bookstore/book[last()]

选取属于bookstore子元素的最后一个book元素

/bookstore/book[last()-1]

选取属于bookstore子元素的倒数第二个book元素

/bookstore/book[position()<3]

选取前两个属于bookstore元素的子元素的book元素

//title[@lang]

选取所有拥有名为lang的属性的title元素

//title[@lang="en"]

选取所有title元素,且这些元素拥有值为 eng 的 lang 属性

/bookstore/book[price>15.00]

选取所有bookstore元素的book元素,且其中的price元素的值须大于15.00

/bookstore/book[price>15.00]/title

选取所有bookstore元素中的book元素的title元素,且其中的price元素的值须大于15.00

//title[@*]

选取所有带有属性的 title 元素

 

如果需要选择一个以上的路径,可以在XPath表达式中使用“|”运算符:

路径表达式

描述

//book/title | //book/price

选取所有book元素的title和price元素

//title | //price

选取文档中所有的title和price元素

/bookstore/book/title | //price

选取所有属于bookstore元素的book元素的title元素,以及文档中所有的price元素

 
XPath表达式的常用运算符:

运算符

描述

实例

|

计算两个节点集

//book | //cd,返回所有带有 book 和 cd 元素的节点集

+

加法

6 + 4,

-

减法

6 - 4

*

乘法

6 * 4

div

除法

8 div 4

=

等于

price=15

!=

不等于

price!=15

<

小于

price<15

<=

小于或等于

price<=15

>

大于

price>15

>=

大于或等于

price>=15

or

price=15 or price=35

and

price>15 or price<35

mod

计算除法的余数

5 mod 2

 
9.XPath定位路径
 
定位步骤从左到右,依次按顺序计算
 
XPath的定位步骤的语法如下:

轴名::节点测试[谓语]

其中:

(1)轴(axis),定义某个相对于当前节点的节点集。

(2)节点测试(node-test),识别某个轴内部的节点
 
(3)谓语(predicate),零或多个预测,以更深入地提炼所选的节点集

示例代码:child::price[price=9.90]

XPath的轴名称 :

轴名称

描述

ancestor

选取当前节点的所有先辈

ancestor-or-self

选取当前节点的所有先辈以及当前节点本身

attribute

选取当前节点的所有属性

child

选取当前节点的所有子元素

descendant

选取当前节点的所有后代元素

descendant-or-self

选取当前节点的所有后代元素以及当前节点本身

following

选取文档中当前节点的结束标签之后的所有节点

namespace

选取当前节点的所有命名空间节点

parent

选取当前节点的父节点

preceding

选取文档中当前节点的开始标签之前的所有节点

preceding-sibling

选取当前节点之前的所有同级节点

self

选取当前节点

 
作者:
出处:
欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能
推荐
关注
 
 

转载于:https://www.cnblogs.com/ForEvErNoME/archive/2012/03/22/2411044.html

你可能感兴趣的文章
(转)python 之路,200行Python代码写了个打飞机游戏!
查看>>
Map的三种遍历方式
查看>>
Ext 中树的动态添加数据
查看>>
SVN update: 'skipped' message
查看>>
访问修饰符private/protected/默认(friendly)protected 方法重写,重载
查看>>
Android 常用 mimeType 表
查看>>
Android培训翻译_将用户发送到其它程序
查看>>
luogu P1162 填涂颜色
查看>>
Resize图片
查看>>
Linux系统安装JDK和Tomcat
查看>>
linux压缩解压缩
查看>>
前端开发工程师如何在2013年里提升自己【转】--2016已更新升级很多何去何从?...
查看>>
markdown语法测试集合
查看>>
running and coding
查看>>
C++中的函数
查看>>
实现QQ第三方登录、网站接入
查看>>
HTML CSS 层叠样式表 三
查看>>
Qt pro pri 文件学习1
查看>>
软件工程概论第六周学习进度条
查看>>
[思路]导入导出功能
查看>>