第5章XML文件的显示.ppt
第5章 XML文件的显示CSS和XSL,呈现XML 文件,原始的XML文件可以用IE 6.0(或者更高的版本)或者Netscape 6来察看,但是如果希望让XML文档象Web页那样显示就必须添加一些额外的显示信息。,样式表简介,为什么需要样式表 XML数据本身并不包含数据显示的信息什么是样式表 描述结构文档表现方式的文档使用样式表的意义数据或内容与表示层分开W3C推荐的样式表标准:CSS级联样式表XSL可扩展样式表,样式表,定义:包含一个或多个XML文档的格式化规则的文档。包含指示WEB浏览器如何将原文档的结构翻译为一个能够显示的结构的代码。任务:将XML文档转换为另一种结构描述如何表达被转换的信息,5.1 级联样式表CSSCascading Style Sheets,是一个文本,包含特殊元素格式特征的一个或者更多的规则和定义。它控制XML文档和HTML文档中的标签如何被格式化。,Css的作用?,1.能把XML文档翻译成特定的目标,将XML文档转换成另一种结构。包括:创建一个不变的文本(比如标签和标题)指定提取所需数据的过滤器改变元素和属性的顺序排列内容完成复杂的转换,根据存在的内容计算值2.描述如何表达被转换的信息。包括:屏幕或页面的布局将转换的内容分配成列表和段落属性的规范(例如间距、页边框、对齐和字体),CSS的语法,语法如下:elementname property1:value;property2:value;Elementname指定元素的名字Property1和 property2为属性名Value指定属性名的不同的值,CSS示例,Hello,there!Good morning!How are you?,xsampdoc color:navy;display:blockgreeting font-family:Arial;font-size:32pt;width:30em;color:redquestion font-size:x-large;color:blackanswer font-size:20pt;color:blue,字体属性,CSS的局限,CSS可以格式化XML文档,能够很好的控制输出的样式,比如色彩、字体、大小等,只能是文档的样式或外观。CSS不能重新排序文档中的元素。CSS不能判断和控制哪个元素被显示,哪个不被显示。CSS不能统计计算元素中的数据。,5.2 可扩展样式表XSL,什么是XSLCSSHTMLXSLXML,什么是XSL?,XSL(eXtensible Style sheet Language),可扩展样式表语言,是XML的首选样式表语言,它要比HTML使用的CSS复杂得多。XSL是WWW协会推荐的一种标准。它包括3部分:一个转换XML文档的方法;XSLT 一个定义XML部分和模式的方法;XPath 一个格式化XML文档的方法。XSL格式对象,5.2.1 XSLT,XSL在转换XML文档时分为两个过程,第一转换文档结构;其次将文档格式化输出。这两步可以分离开来并单独处理第一步的转换过程,也就是XSLT。,XSLT处理器的工作,XSLT样式表,XML文档,MSXML解析器,XSLT树,源树,XSLT处理器,结果树,XSLT和CSS,5.2.3 XSL文档结构,1,XML声明,2,XSL声明,根元素,3,XSL命名空间,http:/www.w3.org/1999/XSL/Transform 基于推荐标准http:/www.w3.org/TR/WD-xsl 基于工作草案,Stylesheet 元素,Stylesheet 元素是所有XSLT样式表的根元素。它是一个声明语句,通知浏览器这是一个样式表文件。语法:前缀xsl包含了XSLT的名称空间URI的引用,确保在XSLT样式表中使用的元素和属性都要依照W3C的规定标准使用。,5.2.2 XPath,XPath是定义XML文档各部分的语法 XPath使用路径定义XML元素 XPath定义了一个标准函数库 XPath是XSLT的一个主要元素 XPath不是用XML书写的 XPath是一个W3C标准,类似传统的文件路径,XPath使用路径表达式识别XML文档里的节点。这些路径表达式看起来很象计算机的文件系统:C:/xpath/1.htm,XPath被用于XSLT,XPath是XSLT的一个主要元素。没有XPath知识,我们将无法建立一个XSLT文档。用于match,select,test属性XPath作为一个寻址XML文档各部分的语言,于1999年11月16日作为W3C推荐标准发布。XPath被设计用于XSLT、XPointer和其它XML解析软件。,XPath语法,XPath使用路径表达式定位XML文档内的节点。XML文档可以看作是一个节点树(非常类似于计算机的树形文件夹)。下面的XPath表达式选择catalog元素的所有cd元素的所有price元素:/catalog/cd/price,XPath数据类型 2-1,节点集(node-set)节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能转换为节点集。这种数据类型是XML文档树的特有产物 布尔值(boolean)由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和false两个值。布尔值可以和数值类型、字符串类型相互转换。,XPath数据类型2-2,字符串(string)字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。数值(number)在XPath中数值为浮点数,可以是双精度64位浮点数。另外包括一些数值的特殊描述,如非数值NaN(Not-a-Number)、正无穷大infinity、负无穷大-infinity、正负0等等。number的整数值可以通过函数取得,另外,数值也可以和布尔类型、字符串类型相互转换。,XPath表达式,XPath将XML文档看作由节点构成的层次树。每棵树包括:元素节点;属性节点;文本节点;处理指令节点;注释节点和命名空间节点。我们可以通过编写XPath表达式来定位树中特定的节点。对一个文档使用XPath会得到以下几种结果:一个单独的节点;一组节点;一个布尔值;一个浮点数;或者一个字符串。,XPath定位路径,一个定位路径表达式返回一个节点集。定位路径表达式一个定位路径可以是绝对的或相对的。绝对定位路径以一个斜线(/)开头,而相对定位路径没有。,路径匹配,位置匹配(多用于value-of),(注意:没有first()函数),属性与属性值匹配(多用于比较),XPath函数,XPath包含转换数据的函数库。XPath函数库XPath函数库包含一套用于转换和替换数据的核心函数。,节点集函数,count()返回被选择的元素的数目id()通过元素的唯一ID选择元素last()返回最后最后一个节点式第几个节点(等同于总共有几个节点)local-name()返回节点集中第一节点的local namename()返回元素的名称namespace-uri()返回节点集中第一个节点的命名空间的URIposition()返回是第几个节点,字符串函数 2-1,concat()将参数字符串连接后返回contains()如果第一个字符串包含第二个字符串,则返回真,否则返回假normalize-space()将字符串中前后空格删除后返回starts-with()如果第一个字符串以第二个字符串开头则返回真,否则返回假string()将一个对象转换为字符串后返回string-length()返回一个字符串的长度,字符串函数 2-2,substring()从字符串的某个偏移位置开始返回指定长度的字符串substring-after()返回字符串中从开始到某一字符串第一次出现的位置后的字符串substring-before()返回字符串中从开始到某一字符串第一次出现的位置前的字符串translate()替换一个字符串中字符,数值函数,ceiling()返回不小于参数的最小整数floor()返回不大于参数的最大整数number()转换参数为一个数字round()对参数四舍五入sum()返回所有参数的和,布尔函数,boolean()将参数转换为布尔值 false()返回假not()如果参数是假,则返回真,否则返回假true()返回真,5.2.4 XSL模板,模板是XSL中最重要的概念,XSLT文件由一个一个的模板组成,任何一个XSLT文件至少包含一个模板。模板可以被拼装组合,也可以单独成块,不同的模板控制不同的输出格式使用模板的优点:如同程序设计中的模块化设计有利于人员分工、协作,模板(template),模板规则由两部分组成:匹配模式(match pattern)和执行。两部分对应的语法为template和apply-templates。,XSL模板元素,定义一个模板调用一个模板(函数调用),XSL模板示例 poem1.xml,李白 静夜思 床前明月光,疑是地上霜。举头望明月,低头思故乡。王之涣 登鹳雀楼 白日依山尽,黄河入海流。欲穷千里目,更上一层楼。,poem1.xsl,5.2.5 XSLT的元素语法,节点选择语句循环判断语句排序语句用于选择的元素 xsl:if和xsl:choose,节点选择语句,用来取出XML文件中被选择的元素或属性的内容,语法如下:输出指定节点的取值,用select属性进行限定 如果要显示属性的值,必须在属性名之前,加“”符号作为前缀。Value-of元素是一个空元素,在结束前,应有“/”。,循环判断语句,循环选择多条数据语法:,排序语句,对XML源文档的元素进行重新排序,sort 元素没有子元素,它用作for-each或apply-template的子元素。在http:/www.w3.org/1999/XSL/Transform里定义;排序的语法:data-type:表示被排序的数据类型,可以是数字、文本或用户自定义,缺省是文本。,单条件判断语句,对匹配条件进行判断,如果为真就执行条件内部的规则。语法用元素的名称作为匹配条件用元素内容作为匹配条件用元素的属性值作为匹配条件,多条件判断语句,多条件的分支判断语法.,5.2.6 缺省的模板规则,XSL定义了两个缺省的模板规则,在所有的样式表中都隐性地包括这两个规则。第一个缺省规则将模板应用于所有元素的子元素,以递归的形式,降序排列元素的结构树;这种方式可确保应用于元素的所有模板规则都能够被说明。第二个缺省规则应用于下一个节点,将这些节点的值复制到输出流中。这两个规则共同使用,即使是没有任何元素的空的XSL样式表,仍然可以产生把输入的XML文档的原始字符数据作为输出内容的结果。,5.2.7 合并多个样式表,xsl:import元素xsl:include元素,xsl:import元素,Import元素用来将一个XSLT样式表导入另一个样式表中。普通形式:其中href属性值必须输入XSLT样式表的地址或定位。Import元素必须立即出现在stylesheet元素之后的一个顶级元素。,xsl:include元素,xsl:include元素也是顶级元素,语法类似于xsl:import元素。它将另一个样式表导入到当前的样式表中所指定的位置处(确切的说,它将远程文档中xsl-stylesheet元素的内容复制到当前文档中)。xsl:include元素的href属性提供要导入的样式表的URI。xsl:include元素可放在顶级处于最后一个的xsl:import元素之后的任何地方。与xsl:imporlt元素的不同:xsl:include元素所包括的规则与执行包括的样式表中的规则具有同样的优先级。,小结,CSS的基础知识可扩展的样式语言(Extensible Style Language,XSL)XPath表达式 XSL文档的结构XSLT的元素语法 合并多个样式表,