第5章 XML文件的显示_第1页
第5章 XML文件的显示_第2页
第5章 XML文件的显示_第3页
第5章 XML文件的显示_第4页
第5章 XML文件的显示_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章XML文件的显示—CSS和XSLXML将数据与表示规则分隔开来。XML需要一种显示机制用于显示XML中的数据。XML的样式语言能将一个原始XML文档转换成适应视觉(或听觉)感应的一系列“解释对象”。XML的样式语言标准主要有:层叠样式表(CascadingStyleSheets,CSS)扩展样式表语言(eXtensibleStylesheetLanguage,XSL)5.1级联样式表CSS

CascadingStyleSheets是一个文本,包含特殊元素格式特征的一个或者更多的规则和定义。它控制XML文档和HTML文档中的标签如何被格式化。实现了数据或内容与表示方法的分离CSS与XML结合比与HTML结合的更好。CSS的语法语法如下:

elementname{property1:value;property2:value;}elementname,选择符,用来指定元素的名字property1和property2为属性名value指定属性名的值也可以把一组属性应用到多个元素中elementname1,elementname2css与xml文档的链接要使样式表应用到对应的xml文档中,必须要在xml文档中进行链接。链接语句是一个xml指令<?xml-stylesheettype=“text/css”href=“XX.css”?>type:指定使用的样式表类型href:URL,表示样式表文件的位置CSS示例-chapter5_1<?xmlversion="1.0"?><xdoc><greeting>Hello,<extension>there!</extension></greeting><answerclass="ans"><extension>Goodmorning!</extension><question>Howareyou?</question></answer></xdoc>xdoc{color:navy;display:block}greeting{font-family:Arial;font-size:32pt;width:30em;color:red}question{font-size:x-large;color:black}answer{font-size:20pt;color:blue}<?xml-stylesheettype="text/css"href="xdoc.css"?>xdoc<?xmlversion="1.0"encoding="gb2312"?><?xml-stylesheettype="text/css"?><xdocSTYLE="color:navy;display:block"><greetingSTYLE="font-family:Arial;font-size:32pt;width:30em;color:red">Hello,<extension>there!</extension></greeting><answerclass="ans"STYLE="font-size:20pt;color:blue"><extension>Goodmorning!</extension><questionSTYLE="font-size:x-large;color:black">Howareyou?</question></answer></xdoc>内嵌cssCSS的局限CSS可以格式化XML文档,能够很好的控制输出的样式,比如色彩、字体、大小等,只能是文档的样式或外观。

CSS不能重新排序文档中的元素。

CSS不能判断和控制哪个元素被显示,哪个不被显示。

CSS不能统计计算元素中的数据。5.2可扩展样式表XSLXSL(eXtensibleStylesheetLanguage),可扩展样式表语言,是XML的首选样式表语言,提供了比CSS更为强大的功能。。XSL的主要用途是将一个xml文档转换为另外的文档(XML、HTML或者其他格式的文档)XSL是WWW协会推荐的一种标准。它包括3部分:

1、XSLT(XSLTransformation):将xml文档转换为其他形式的文档的语言。2、XPath:在xml文档中导航的语言3、FO(FormatObject):格式化xml文档语言,是一种定义xml显示方式的语言。XSL使用XSL样式表对XML文档进行转换过程分为两个步骤:1、根据文档构造源树(xml文档的树形结构,其中每个元素一个节点),然后根据给定的XSL规则转换为可显示的结果树。也就是XSLT。2、生成结果树后,对其进行解释,产生一种适合显示的格式,即格式化。可扩展样式表XSLXML文档XSL样式表XSLT

转换过程格式化过程结果文档XSLT初步XSLT的主要功能就是转换,将一个没有外观样式信息的xml文档作为一个源树,转换为一个有样式信息的结果树。在XSLT文档中定义了与xml文档中各个逻辑成分相匹配的模板和匹配转换方式。通过XSLT可以添加和移除要显示的元素和属性,还可以进行重新排列等。在这过程中需要借助XSL处理器负责实现转换过程。例子:chapter5_2<?xmlversion="1.0"encoding="gb2312"?><books> <book> <title>数据库系统概论</title> <ISBN>7040195836</ISBN> <author>王珊</author> <publisher>高等教育出版社</publisher> <price>30</price> </book> <book> <title>xml编程与应用教程</title> <ISBN>9787302223481</ISBN> <author>孙更新</author> <publisher>清华大学出版社</publisher> <price>30</price> </book></books><?xmlversion="1.0"encoding="UTF-8"?><xsl:stylesheetversion="1.0"xmlns:xsl=/1999/XSL/Transform<xsl:templatematch="/"> <html><body> <h2>图书信息</h2> <tableborder="1"> <trbgcolor="red"> <thalign="left">title</th> <thalign="left">author</th> </tr> <xsl:for-eachselect="books/book"> <tr> <td><xsl:value-ofselect="title"/></td> <td><xsl:value-ofselect="author"/></td> </tr> </xsl:for-each> </table> </body></html></xsl:template></xsl:stylesheet>选取指定节点集中的每个xml元素选取某个选定节点的值,并添加到输出流中输出定义了一个模板,属性match说明模板在xml中开始的位置表明定义的是XSLT样式文档,包括版本号和命名空间<?xmlversion="1.0"encoding="gb2312"?><?xml-stylesheettype="text/xsl"href="books.xsl"?><books> <book> <title>数据库系统概论</title> <ISBN>7040195836</ISBN> <author>王珊</author> <publisher>高等教育出版社</publisher> <price>30</price> </book> <book> <title>xml编程与应用教程</title> <ISBN>9787302223481</ISBN> <author>孙更新</author> <publisher>清华大学出版社</publisher> <price>30</price> </book></books>Books.xml5.2.4XSL模板模板是XSL中最重要的概念,XSLT文件由一个一个的模板组成,任何一个XSLT文件至少包含一个模板。模板可以被拼装组合,也可以单独成块,不同的模板控制不同的输出格式。使用模板的优点:如同程序设计中的模块化设计有利于人员分工、协作模板(template)模板规则由两部分组成:匹配模式(matchpattern)和执行。匹配模式指定了xml源文档中哪一个节点将被模板处理。执行则定义输出的是什么格式。两部分对应的语法为template和apply-templates。

XSL模板元素(1)定义一个模板<xsl:templatematch="匹配模式">每个xsl:template都有一个match属性,用来指定要将此模板应用于输入文档的哪个节点。<xsl:templatematch=“name”></xsl:template><xsl:templatematch=“/”></xsl:template>match属性的属性值是一个XPath表达式,将在后面具体描述XSL模板元素(2)调用一个模板(函数调用)<xsl:apply-templatesselect="模式">select属性定义确切的节点的名称,可选,默认值“node()”,表示对当前节点的所有节点执行该模板。

<xsl:apply-templates/>xsl:apply-templates总是包含在xsl:template元素中XSL模板示例poem1.xml<?xmlversion="1.0"encoding="UTF-8"?><xsl:stylesheetversion="1.0"xmlns:xsl="/1999/XSL/Transform"xmlns:fo="/1999/XSL/Format"><xsl:templatematch="/"><xsl:for-eachselect="唐诗/五言绝句"><xsl:apply-templates/></xsl:for-each></xsl:template><xsl:templatematch="标题"><spanstyle="color:red;font-size:25"><xsl:apply-templates/></span></xsl:template><xsl:templatematch="内容"><p><xsl:apply-templates/></p></xsl:template></xsl:stylesheet><?xmlversion="1.0"encoding="gb2312"?><?xml-stylesheettype="text/xsl"href="poem1.xsl"?>

<唐诗>

<五言绝句>

<作者>李白</作者>

<标题>静夜思</标题><內容>

床前明月光,疑是地上霜。 举头望明月,低头思故乡。</內容></五言绝句><五言绝句><作者>王之涣</作者><标题>登鹳雀楼</标题><內容>

白日依山尽,黄河入海流。

欲穷千里目,更上一层楼。</內容></五言绝句></唐诗>poem1.xslXSLT的元素语法节点选择语句<xsl:value-of>循环判断语句<xsl:for-each>排序语句<xsl:sort>用于选择的元素xsl:if和xsl:choose

节点选择语句<xsl:value-of>用来取出xml文件中被选择的元素或属性的内容,语法如下:

<xsl:value-ofselect=“匹配模式”/>select:限定从哪个节点或属性来取值注意:1、如果要显示属性的值,必须在属性名之前,加“@”符号作为前缀。

<xsl:value-ofselect=“元素名/@属性名”2、value-of元素是一个空元素,在结束前,应有“/”。<xsl:templatematch=“book”><xsl:value-ofselect=“title”/></xsl:tempate>循环判断语句<xsl:for-each>遍历指定的节点集中的节点,循环选择多条数据。节点集中有m个相匹配的元素,循环就执行m次。语法:

<xsl:for-eachselect="pattern"> <!--输出内容--></xsl:for-each>books3排序语句<xsl:sort>对XML源文档的元素进行重新排序,sort元素没有子元素,它用作for-each或apply-template的子元素。在/1999/XSL/Transform里定义;排序的语法: <xsl:sortselect=“元素名”

order=“ascending|descending”

case-order=“upper-first|lower-first”

data-type=”text|number|qname”/>data-type:表示被排序的数据类型,可以是数字、文本或用户自定义,缺省是文本。books3单条件判断语句<xsl:if>对匹配条件进行判断,如果为真就执行条件内部的规则。语法用元素的名称作为匹配条件<xsl:iftest="元素名称">用元素内容作为匹配条件<xsl:iftest="元素名称[.='元素内容']">用元素的属性值作为匹配条件<xsl:iftest=".[@属性名称='属性值']">xmlif多条件判断语句(xsl:choose)多条件的分支判断语法<xsl:choose> <xsl:whentest=“匹配模式”> <!--输出内容--> </xsl:when>

<xsl:whentest=“匹配模式”> <!--输出内容--> </xsl:when>

….

<xsl:otherwise> <!--输出内容--> </xsl:otherwise></xsl:choose>books3XSLT和CSS级联样式表CSSXSL转换XSLT使用简单使用复杂不能排序、添加或删除元素可排序、添加或删除元素不能访问文档除元素外的其它信息能访问其它信息使用内存比较少使用较多内存和处理器能力与XML语法不同语法与XML相同XPath

<xsl:for-eachselect="books/book">XPath使用路径表达式识别XML文档里的节点。这些路径表达式看起来很象计算机的文件系统。XPath是XSLT的一个主要元素。没有XPath知识,我们将无法建立一个XSLT文档。用于match,select,test属性/catalog/cd/priceXPath数据类型节点集(node-set)

节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能转换为节点集。

这种数据类型是XML文档树的特有产物。布尔值(boolean)

由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和false两个值。布尔值可以和数值类型、字符串类型相互转换。

XPath数据类型字符串(string)

字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。数值(number)

在XPath中数值为浮点数,可以是双精度64位浮点数。另外包括一些数值的特殊描述,如非数值NaN(Not-a-Number)、正无穷大infinity、负无穷大-infinity、正负0等等。number的整数值可以通过函数取得,另外,数值也可以和布尔类型、字符串类型相互转换。XPath表达式XPath将XML文档看作由节点构成的层次树。每棵树包括:元素节点;属性节点;文本节点;处理指令节点;注释节点和命名空间节点。我们可以通过编写XPath表达式来定位树中特定的节点。对一个文档使用XPath会得到以下几种结果:一个单独的节点;一组节点;一个布尔值;一个浮点数;或者一个字符串。XPath定位路径

一个定位路径表达式返回一个节点集。一个定位路径可以是绝对的或相对的。绝对定位路径以一个斜线(/)开头,而相对定位路径没有。定位步骤包括三个方面:1、一个轴:指定当前定位步骤和当前节点选择的节点间的树关系。2、一个节点测试:指定定位步骤选择的节点的节点类型和扩展名。3、零或多个预测:使用表达式进一步抽取定位步骤选定的节点集。示例结果child::cd选择当前节点的子节点的所有cd元素,没有则返回一个空节点集attribute::src选择当前节点的src属性,没有则返回一个空节点集child::*选择当前节点的所有子元素attribute::*选择当前节点的所有属性child::node()选择当前节点的所有子节点/选择文档根常用操作符(简略型)符号含义举例匹配结果/路径指示符,相当于DOS目录分割符/根节点/student/name节点student的子节点name//所有路径以"//"后指定的子路径结尾的元素

//skill所有skill节点*路径通配符/roster/student/*roster节点->student节点下所有子节点//*所有节点|逻辑或name|sex|scorename、sex和score节点位置匹配(多用于value-of)举例

含义

匹配结果

/student[1]student节点的第一个子节点name节点/student[last()]student节点的最后一个子节点skill节点(注意:没有first()函数)属性与属性值匹配(多用于比较)举例含义匹配结果//student[@ID]所有具有ID属性的student节点所有具有ID属性的student节点//student[@ID=”103”]所有ID值等于103的student节点ID值等于103的student节点节点集函数count()返回被选择的元素的数目id()通过元素的唯一ID选择元素last()返回最后最后一个节点式第几个节点(等同于总共有几个节点)local-name()返回节点集中第一节点的localnamename()返回元素的名称namespace-uri()返回节点集中第一个节点的命名空间的URIposition()返回是第几个节点字符串函数2-1concat()将参数字符串连接后返回contains()如果第一个字符串包含第二个字符串,则返回真,否则返回假normalize-space()将字符串中前后空格删除后返回starts-with()如果第一个字符串以第二

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论