1、XML显示技术之二XSL及XPath,CSS的局限,CSS可以格式化XML文档,能够很好的控制输出的样式,比如色彩、字体、大小等,只能是文档的样式或外观。 CSS不能重新排序文档中的元素。 CSS不能判断和控制哪个元素被显示,哪个不被显示。 CSS不能统计计算元素中的数据。,可扩展样式表XSL,什么是XSLCSSHTMLXSLXML,什么是XSL?,XSL(eXtensible Style sheet Language),可扩展样式表语言,是XML的首选样式表语言,它要比HTML使用的CSS复杂得多。 XSL是WWW协会推荐的一种标准。它包括3部分: 一个转换XML文档的方法; XSLT 一个
2、定义XML部分和模式的方法; XPath 一个格式化XML文档的方法。 XSL格式对象,5.2.1 XSLT,XSL在转换XML文档时分为两个过程, 第一:转换文档结构; 其次:将文档格式化输出。 这两步可以分离开来并单独处理 第一步的转换过程,也就是XSLT。,XSLT处理器的工作,XSLT样式表,XML文档,MSXML解析器,XSLT树,源树,XSLT处理器,结果树,XSLT和CSS,XSL是由W3C制定XSL通过XML定义,符合XML语法规则XSL包括两部分:第一部分描述如何将一个XML文档进行转换第二部分定义格式对象(FO)目前FO还不完善,但第一部分日臻成熟,已从XSL中分离出来,取
3、名为XSLT现在所说的XSL一般是指XSLT,XSL定义显示的基本思想,定义转换模板将XML源文件转换为带样式信息的可浏览文档最终的可浏览文档可以是HTML格式或其他格式目前大多数情况下,转换为HTML文档来显示。,如何用XSL进行XML变换,XSL样式单有三种方式将XML文档变换成其他格式(HTML):(A)、XML文档和相关的样式单都是用于客户端的;(B)、服务器将XSL样式表单应用于XML文档,使其变换后,再将已变换的HTML文档发送到客户端;(c)、通过另外程序将原XML文档变换成HTML格式后,将此文档放置在服务器上。服务器与客户端都处理HTML文档。,5.2.3 XSL文档结构,
4、,XML声明,XSL声明,根元素,XSL命名空间,http:/www.w3.org/1999/XSL/Transform 基于推荐标准http:/www.w3.org/TR/WD-xsl 基于工作草案,Stylesheet 元素,Stylesheet 元素是所有XSLT样式表的根元素。它是一个声明语句,通知浏览器这是一个样式表文件。语法:前缀xsl包含了XSLT的名称空间URI的引用,确保在XSLT样式表中使用的元素和属性都要依照W3C的规定标准使用。,简单XSL示例,浏览XSL文档,套用XSL显示XML文档,如何在XML文档中引用XSL文档?实质上就是建立XSL样式表与XML文档的链接,即在
5、XML声明后加入PI指令:(同CSS)uri:yy.xsl或者http:/xxxx/xxx/xx/yy.xsl等形式,引用XSL的XML文档举例, 蓝蓝的天空清清的湖水哎耶绿绿的草原这是我的家哎耶奔驰的骏马洁白的羊群哎耶还有你姑娘这是我的家哎耶我爱你我的家我的家我的天堂 ,不用XSL样式表的XML文档,套用XSL显示XML文档效果,XSL模板,模板是XSL样式表的最重要部分模板就是XSL处理一个数据块的规则其表示为一个xsl:template元素模板规则将特定的输出与特定的输入相关联模板通过match特性指定其应用于哪个节点,使用模板的优点:如同程序设计中的模块化设计有利于人员分工、协作,模板
6、(template),模板规则由两部分组成:匹配模式(match pattern)和执行。两部分对应的语法为template和apply-templates。,XSL模板元素,定义一个模板调用一个模板(函数调用),XSL模板示例 poem1.xml, , 李白 静夜思 床前明月光,疑是地上霜。举头望明月,低头思故乡。 王之涣 登鹳雀楼 白日依山尽,黄河入海流。欲穷千里目,更上一层楼。 ,poem1.xsl,模板规则,一个xsl模板的定义规则所匹配的节点模板中执行何种脚本语言使格式化引擎处理子节点模板应用于所选元素指定输出数据排列方式,XSLT元素及其说明,一个XSL实例(3.XSL),认购信息
7、客户信息客户姓名账户代码现住址联系电话, ,XML文档套用XSL样式单, 张祥 A157109768 武汉大学樱园小区12号 87430070 刘娴 A142109760 华科大东二区28号 87409256 ,IE浏览效果,XSL的执行过程当XML解析器解析XML文档时,首先遇到XML文档的根文档(由match属性值表示)时,需要执行这个模板,将前面的一些元素(HTML、HEAD、BODY等)写到输出文档中去,然后执行xsl:for-each指令,把处理的结果依次放入输出文档中。处理就结束了。,XSLT模板模板就是要应用的规则 元素定义了用于进行转换的节点内容,其语法如下所示: 模板体匹配属
8、性(match)则用XPath表达式标识出源文档中的节点,交由模板处理 。,模板体使用XPath从XML文档中选取出要进行操作的节点集,接着就需要使用XSL定义的元素来转换这些节点。,xsl:apply-templates(执行模板) 元素用在模板内告诉XSL处理器把所提供的节点集合匹配其他模板。注意:(1)select属性用来定义匹配的节点名称,是可选的,默认值为node(),表示对当前节点的所有子节点执行该模板。,(2)xsl:apply-templates总是在xsl:templates元素中。 如: 表示处理根节点下所有的person元素 表示处理所有person下的子元素,XPath
9、,XPath是定义XML文档各部分的语法 XPath使用路径定义XML元素 XPath定义了一个标准函数库 XPath是XSLT的一个主要元素 XPath不是用XML书写的 XPath是一个W3C标准,.XPath 简介,XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。 XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。 因此,对 XPath 的理解是很多高级 XML 应用的基础。,.什么是XPath?,XPath 使用路径表达式在 XML 文档中进行导航
10、 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。XPath 包含一个标准函数库 XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值,日期和时间比较、序列处理、逻辑值等等。XPath 是 XSLT 中的主要元素 XPath 是 XSLT 标准中的主要元素。如果没有 XPath 方面的知识,您就无法创建 XSLT 文档。XPath 是一个 W3C 标准 XPath 于 1999年11月16日 成为 W3C 标准。XPath 被设计供 XSLT、XPointer 以及其他 XML 解析软件使用。,
11、.XPath 节点,在XPath中,有七种类型的节点:元素、属性、文本(包括一组字符数据,即CDATA包含的字符)、命名空间、处理指令、注释以及文档节点(根节点)。 XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。 根节点包含两个子节点:根元素和xml-stylesheet处理指令。根元素是节点树中的第一层子节点。,.节点关系,父(Parent)每个元素以及属性都有一个父。子(Children)节点元素可有零个、一个或多个子。同胞(Sibling)拥有相同的父的节点先辈(Ancestor)某节点的父、父的父,等等。后代(Descendant)某个节点的子,子的子,等等。,.
12、XPath 语法,XPath使用路径表达式来选取XML文档中的节点或节点集。 节点是通过沿着某个路径(path)或者步(step)来选取的。,1.5.1位置路径表达式,绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:绝对位置路径:/step/step/. 相对位置路径:step/step/.,.选取节点,Demo:,.谓语(Predicates),.选取未知节点,.选取若干路径,定位路径,这是XPath中一类重要的表达式其功能是从上下文节点中选择相关节点集合定位路径分两类:相对定位路径:child:PEOPLE/descenda
13、nt:PERSON绝对定位路径:child : sectionattribute : para,定位阶,定位路径由一个或多个定位阶组成 child :paraposition()=last()本例选择当前节点下最后一个名为para的子元素,轴,节点测试,谓词,轴(Axis),Child:子轴,简写为”/”Descendant:后代轴,简写为”/”Self:自身轴,简写为”.”Parent:父轴,简写为”.”Attribute:属性轴,简写为” Ancestor:祖先轴,轴的定位示例,“/mydoc/part-nbr”选择带有元素类型名称part-nbr的所有元素节点,它们属于mydoc文档元素
14、的后代;即文档中的所有part-nbr元素。 /confidential/. 为特定属性confidential搜索整个文档,然后,找出该属性附加在何种元素上。,节点测试(node test ),节点测试是对轴所对应的节点集合进行测试,以判断是否有合适的节点。节点测试包括名称测试、节点类型测试和处理指令测试。node()用于任意类型的节点测试 text()测试文本节点 comment()用于选取注释节点 processing-instruction()所有处理指令节点,谓词(predicate ),使用任意表达式进一步更新由定位阶选择的节点集 ,其目的是过滤掉某些节点集合。其语法为: Expr
15、ession 示例: child:itemposition()=3选择item子元素集合中第3个item子元素。可以简写为item3,.XPath Axes(坐标轴),Demo:,.XPath 运算符,.XPath函数,.XPath函数续1,.XPath函数续2,.XPath函数续3,XPath应用示例,要进行定位操作的XML文档:,XSL元素的使用,(1)xsl:value-of元素,通过XSL可访问XML文档中元素及其属性,其语法为: 访问XML文档元素的属性值时,其语法为:,使用xsl:value-of获得元素值(节点值),该元素获得指定节点的值并输出,其select属性用来设置匹配模式
16、。该模式为XPath表达式。, 李白 太白 关山月 明月出天山,苍茫云海间。 长风几万里,吹度玉门关。 汉下白登道,胡窥青海湾。 由来征战地,不见有人还。 戍客望边色,思归多苦颜。 高楼当此夜,叹息未应闲。 ,编写一个xsl文档: ,这里 表示输出XML文档中的所有元素的值。, 李白 太白 关山月 明月出天山,苍茫云海间。 长风几万里,吹度玉门关。 汉下白登道,胡窥青海湾。 由来征战地,不见有人还。 戍客望边色,思归多苦颜。 高楼当此夜,叹息未应闲。 ,输出匹配节点的值:, jack 28,XML文档:,编写xsl文档:, , jack 28,使用xsl:value-of获得属性值, 网络应用
17、技术 13.2 局域网组建技术 25.5 , ,编写xsl文档:,表示匹配所有book元素的ID属性。,一个综合应用:,张三男1977.5数据库设计与维护、WEB开发李四男1979.12UML、C Sharp、XML, 技能 ,姓名 性别 生日 ,语法为: 访问内容,(2)xsl:for-each元素 允许循环处理被选择的节点。,循环选择数据多条数据, tom 28 张三 30 李四 41 , ,只能显示第一条件记录值。,如果显示所有元素,第一种办法: 采用xs:apply-templates, ,第二种方式:采用xsl:for-each, ,例子:, 王维 竹里馆 独坐幽篁里,弹琴复长啸。深
18、林人不知,明月来相照。 孟浩然 宿建德江 移舟泊烟渚,日暮客愁新。野旷天低树,江清月近人。 王之涣 登鹳雀楼 白日依山尽,黄河入海流。欲穷千里目,更上一层楼。 , ,对XML源文件中元素排序,其语法为: order-by “元素名”, 张祥 A157109768 武汉大学樱园小区12号 87430070 1000 刘娴 A142109760 华科大东二区28号 87409256 2000 ,对XML元素排序示例,认购信息客户信息客户姓名账户代码所持股数现住址联系电话 ,XSL中的条件语句,:用于实现简单的条件判断简化的语法表达式:转换内容转换内容是一个模板,测试条件满足,则处理器实例化模板,若
19、测试不满足,XSL处理器忽略本语句,继续处理结束标记后的语句。,当test属性的值为元素名称,李华92倪冰89张三98杨惠85, ,当test属性的值为元素内容:,匹配的条件为元素指定的内容。,他是最高分,当test属性的值为属性值:,匹配的条件为元素指定的属性值。,李华92倪冰89张君宝98杨惠85,学号为103的学生存在 ,当test属性的内容带有函数:,条件测试示例, 张祥 10000 8000 15000 6000 刘娴 5000 12000 9000 4000 ,本例对一个持股信息的结构化数据进行处理: 要求对高于一定持股数额的数据用不同颜色显示。,带有条件语句的XSL文档,持股信息
20、,部分持股信息统计表(单位:股数)客户姓名武商股份神龙电业浦发银行兴和基金,=8000 color:red,IE游览显示结果,多重条件判断元素,多重条件判断语法为: ,可使用多个 xsl: when 分别设置多重条件.,多重条件测试示例, 张祥 10000 8000 15000 6000 , 刘娴 5000 12000 9000 4000 赵洋 1000 2000 8000 10000 ,带有多重判断的XSL文档, 客户信息 客户姓名武商股份神龙电业浦发银行兴和基金 ,风险投资人:保守投资人:未知投资人:,IE浏览效果,综合应用,XML技术及应用40 孙更新 宾深 ,操作系统教程30汤子瀛汤小
21、丹 ,要求作者之间用,号隔开。, books at cybershoppebook at cybershoppebook idtitilerateauthor(s), ,XSL元素的创建,用XSL创建XML元素 新建元素的内容 ,用XSL增加新元素示例, 歌词(略), 蓝蓝的天空清清的湖水哎耶绿绿的草原这是我的家哎耶奔驰的骏马洁白的羊群哎耶还有你姑娘这是我的家哎耶我爱你我的家我的家我的天堂 ,新增节点浏览效果,XSL与Script,Script是目前Web常用的方法XML支持ScriptXSL也支持Script使用方法:用xsl:script声明script内容用xsl:eval使用scrip
22、t,XSL中使用脚本语言示例,在持股信息XML文档中,有时在显示时需要对其中数据进行统计,本例就是在XSL样式表中通过使用脚本语言表达式,完成上述任务。本例使用Jscript脚本语言, 张祥 10000 8000 15000 6000 刘娴 5000 12000 9000 4000 ,XSL中使用Jscript示例,散户持股信息表部分散户持股信息统计表股东姓名武商股份神龙电业浦发银行兴和基金,总计total(this,武商股份)total(this,神龙电业)total(this,浦发银行)total(this,兴和基金),function total(node,q)temp=0;mark=/持股信息/股东/+q;v=node.selectNodes(mark);for(t=v.nextNode();t;t=v.nextNode() temp+=Number(t.text);return temp;,浏览显示效果,CSS与XSL对比,相同之处:是为建立XML与用户间联系而存在都是与XML文件相分离不同之处:CSS有自已的语法,支持HTMLCSS不用于转换XSL是一种转换语言XSL是XML语法XSL不支持HTML,