




已阅读5页,还剩82页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章XML文档的显示 XML实用教程 要点及主要内容 样式单的概念使用CSS创建样式单的方法和特点使用XSL创建样式单的方法和特点CSS和XSL各自的优势 章节安排 4 1样式单基础4 2CSS样式单4 3XSL样式单4 4两种样式单比较4 5小结4 6习题 4 1样式单基础 制定XML标准的目的是让数据结构化 并赋予其明确的语义 使之易于数据的交换 因此 XML不再像HTML那样 将内容标记和外观描述标记混合在一起 而是设计成一种纯粹基于内容的解析式语言 将内容与表现形式相分离 即XML文档中只包含数据信息 并不提供数据的显示功能 但如果不加修饰 XML文档的数据又难免枯燥 本章介绍的样式单就是用来解决XML文档的显示问题 由样式单告诉浏览器该如何显示XML文档中所标记的文本内容 样式单 StyleSheet 是一种专门描述结构文档表现方式的文档 它既可以描述这些文档如何在屏幕上显示 也可以描述它们的打印效果 甚至声音效果 样式单一般不包含在XML文档内部 而以独立的文档方式存在 与HTML描述数据显示方式的传统方法相比 样式单有以下优点 1 文档体积小 在实际应用中 常常给相同名称标记下的内容定义相同的表现方式 传统的方法需要在每个标记中予以描述 造成大量的重复定义 而在样式单中 对于同一个标记只需进行一次描述 从而大大缩小了需要传输的文件的体积 可提高传输速度 并节约带宽 2 表达效果丰富 样式单可以支持文字和图像的精确定位 三维层技术以及交互操作等 对于文档的表现力远远超过HTML中的标记 更重要的是 样式单的标准规范独立于它所描述的文档 当需要实现更丰富的表达效果时 仅需修改样式单规范即可 不会牵涉到原始的XML文档内容 3 可读性好 样式单对各种标记的显示进行集中定义 且定义方式直观易读 这使得它易学易用 可读性 可维护性都比较好 同时 由于采用内容与表现形式相分离的方式 XML文档也相对简洁 清晰 重点突出对内容本身的描述 而不必考虑文档的显示功能 这样 XML文档就不会重蹈HTML文档结构混杂 内容繁乱的覆辙 XML的编写者也可以集中精力于数据本身 而不受显示方式等细节的影响 4 便于信息检索 样式单可以实现非常复杂的显示效果 由于样式描述与数据描述相分离 显示细节的描述并不会影响到文档中数据的内在结构 因此 网络搜索引擎对文档进行搜索时 不会被各式各样的显示描述标记所干扰 5 实现同一文档的多种显示 样式单的另一大好处在于 定义不同的样式单可以使相同的数据呈现出不同的显示外观 从而适合于不同应用 甚至能够在不同的显示设备上显示 这样 XML数据就可以得到最大程度的重用 满足不同的应用需求 基于以上优点 W3C推荐采用样式单来描述结构文档的显示效果 目前 W3C为XML数据显示发布了两个建议规范 CSS和XSL 下面将分别介绍如何使用这两种样式单来配合XML完成文档的显示 4 2CSS样式单 4 2 1CSS的结构及规则4 2 2关联CSS与XML文档 4 2 1CSS的结构及规则 CSS CascadingStyleSheets 层叠样式单 是一种样式描述规则 目前W3C有两个推荐标准 CSS1和CSS2 CSS1于1996年12月通过 CSS2则于1998年5月通过 CSS2是在CSS1的基础上制定的 基本上涵盖了CSS1 并在CSS1的基础上增加了媒体类型 特性选择符 声音样式等功能 并对CSS1原有的一些功能进行了扩充 CSS最初是针对HTML而提出的样式单语言 但它同样可以很好地应用于描述XML文档的外观表现 利用CSS 我们可以定义HTML或XML文档中元素的显示效果 包括元素的位置 颜色 背景 边空 字体 排版格式等等 例4 1 一个含有CSS样式单的HTML文档及它在浏览器中的显示结果 CSS的基本思想是为结构文档中的标记定义相应的一组显示样式 定义的基本格式为 选择符 样式属性 取值 样式属性 取值 1 选择符选择符用于指定样式规则所应用的元素的名称 浏览器在碰到这些元素时 就使用定义好的样式来显示它们 基本的选择符包括标记选择符 类选择符 标识选择符 伪类选择符 下面分别介绍 标记 tag 选择符标记可以是HTML中的标记 也可以是XML中已定义的标记 具体的定义方式是 标记名 样式属性 取值 样式属性 取值 清单4 1为HTML中的标记定义了样式 将该标记下的文本用红色显示 因此 浏览结果中的第一行是红色的 类 class 选择符无论是HTML或XML文档 有些内容是可以分类处理的 相应地 对于某一类的内容可以定义不同的样式进行显示 清单4 1定义了一个类 myclass 并为其定义了绿色显示的样式 所以属于该类的元素 即第二行文本 显示出来是绿色的 定义样式时 class还可以与标记相关联 也就是说class的样式受到包含它的标记的制约 因此 清单4 1为属于myclass类的标记定义了蓝色显示的样式 相应地 第三行文本呈蓝色 与标记不相关的类选择符的定义方法 类名 样式属性 取值 样式属性 取值 与标记相关的类选择符定义方法 标记名 类名 样式属性 取值 样式属性 取值 注意 在对XML文档中的class定义样式时 该class应该是在DTD中预先声明了的 否则会导致错误 标识 id 选择符在HTML或XML文档中 往往需要唯一地标识一个元素 即赋予它一个id标识 以便在对整个文档进行处理时能够较快地找到这个元素 CSS也可以将id标识作为选择符进行样式设定 定义的方法与类大同小异 只要把符号 改成 就行了 方法是 与标记不相关的标识选择符的定义 标识名 样式属性 取值 样式属性 取值 与标记相关的标识选择符定义 标记名 标识名 样式属性 取值 样式属性 取值 一般情况下 为标识定义的样式是优先于为类定义的样式的 因此清单4 1中第四行中的文本虽然属于类 myclass 但显示效果为黑色 伪类 pseudo classes 选择符伪类可以看做是一种特殊的类选择符 是能被支持CSS的浏览器所自动识别的特殊选择符 它的最大的用处就是可以对链接在不同状态下定义不同的样式效果 伪类的定义方法是 选择符 伪类 样式属性 取值 伪类和类不同 是CSS已经定义好的 不能象类选择符一样随意用别的名字 根据上面的语法可以解释为选择符在某个特殊状态下的样式 我们最常用的是4种A 锚 元素的伪类 它表示链接的4种不同状态 link visited active hover 未访问的链接 已访问的链接 激活链接和鼠标停留在链接上 可以给它们分别定义不同的效果 A link color red text decoration none A visited color green text decoration none A hover color blue text decoration underline A active color brown text decoration underline 那么 链接未访问时的颜色是红色且无下划线 访问后是绿色且无下划线 激活链接时为蓝色并有下划线 鼠标在链接上时为棕色并有下划线 我们还可以将某个样式同时施加在多个选择符指定的不同元素上 只要将在大括号括起来的样式定义之前的各选择符之间用逗号分隔即可 选择符 选择符 样式属性 取值 样式属性 取值 如果选择符之间用空格分隔 则是用前面的父元素来约束后面的子元素 选择符选择符 样式属性 取值 样式属性 取值 2 样式属性样式属性就是指元素的哪些属性可以在样式单中进行改变 在CSS1和CSS2中有很多的篇幅讲样式属性 其中CSS1中包括字体属性 字形 大小 粗细 倾斜等 颜色属性 背景属性 文本属性 边框属性 页边空 边框 内空等 显示属性 独立块 内联 列表 表格 隐藏等 几大类 在CSS2中对显示属性的最大改进就是增加了表格的显示方式 此外还增加了一些与页面排版 跨媒体出版相关的内容 这里我们不加赘述 3 属性值在定义样式时 除需指出样式所应用的元素 元素的属性之外 还要给属性赋一个值 根据属性的不同 属性值的选取也有所不同 主要有以下四种 长度 在样式中很多的属性都与长度有关 如宽高 字号 字距 行距 边空 线宽等等 需要注意的是 当长度作为一个尺寸的度量 其单位是非常重要的 否则 失之毫厘 谬以千里 显示结果可能就会出乎意料之外了 URL 有时需要给某些属性赋予URL值 如背景图象属性 background image 在进行URL赋值时 要将URL放在url 之中 也可以将其用单引号或者双引号括起来 颜色 在CSS中颜色是个很重要的属性 颜色值的赋值有四种形式 颜色名称 十六进制数 RGB十进制数及百分比方式 其中前两种方式较为常用 例如对于红色来讲可以用下面几种方法定义 p color red p color ff0000 p color RGB 255 0 0 和p color RGB 100 0 0 关键字 这里的关键字是指预先定义好的字符型属性值 对于不同的属性有不同关键字值 例如上面提到的颜色名称 red 实际上就属于关键字 其它的又如用于线型的none solid dashed double等等 4 2 2关联CSS与XML文档 根据XML文档的不同用途 关联CSS与XML文档的方法也有所不同 有些XML文档主要面向数据交换 其表现形式相对简单 有些文档是专门面向Web发布的 它的表现力相对就要强一些 总结起来 使用CSS来显示XML文档的方式有二 引用方式和嵌入方式 4 2 2 1引用方式 引用方式是指XML文档本身不含有样式信息 而是通过引用一个外部的CSS文档来定义文档的表现形式 大部分XML文档都采用这种方式 这也与XML语言内容与形式分开的原则相一致 使用引用方式关联CSS和XML文档的一个好处是可以将同一个样式单用于多个文档 具体实现的方法是在XML文档的开头部分加上一条处理指令 其中 处理指令的 type 属性是正在使用的MIME类型的样式单 对于CSS来说 其值是 text css 对XSL来说 则是 text xsl href 属性值是一个URL 可以是一个相对地址 也可以是绝对地址 指明在何处可找到样式单 例如 使用处理指令 表示样式单mystyle css放在Web服务器根目录下的style目录中 这里是个相对地址 href 属性值也可以是指向另一个Web站点上的样式单的绝对URL值 例如 此外 在一个XML文档中还可以使用多个处理指令 以便应用不同样式单中的规则 清单4 2是一个描述图书信息的XML文档books xml 按照处理指令的指示 该文档在浏览器上的表现方式就由同目录下的样式文件mystyle css所决定 因此 在文档的XML声明语句 即第一行 之后应添加如下代码 清单4 3是mystyle css文件 XML文档的浏览效果如图4 2所示 清单4 2 数据库系统概论7040195836王珊萨师煊高等教育出版社30计算机网络7505387863谢希仁电子工业出版社40 清单4 3 book font size 15pt font weight bold color blue display block margin bottom 5pt ISBN author publisher price font weight bold font size 12pt display block margin left 20pt title font weight bold font size 14pt display block color red margin top 5pt margin left 8pt 4 2 2 2内嵌方式 内嵌方式是指将CSS样式信息直接包含到XML文档中 为元素设置style属性 并在属性值中给出对其样式的定义 这种用法主要出现在一些特殊的XML文档中 一般来讲内嵌CSS样式的XML文档本身就是面向显示的 如SVG SMIL等 清单4 4是一个内嵌方式的例子 其中单个元素的样式是使用 style 属性声明的 清单4 4 数据库系统概论7040195836王珊萨师煊高等教育出版社30 4 3XSL样式单 4 3 1XSL概述尽管CSS样式单可以解决简单的XML显示问题 然而它最初是为HTML开发的 对处理复杂的XML文档在功能上略显不足 W3C因此为XML制定了专门的样式单语言XSL 可扩展样式单语言 eXtensibleStylesheetLanguage XSL其主要用途是将一个XML文档转换为另外的文档 得到的文档可以是XML HTML 无格式文本或任何其他基于文本的文档 以及定义转换后的文档显示外观 提供了比CSS更为强大的功能 XSL包括三部分内容 XSLT XSLTransformation 用于将XML文档转换为其他形式的文档的语言 XPath 用于在XML文档中导航的语言 描述如何识别 选择 匹配XML文档中的各个构成元件 包括元素 属性 文字内容等 XSLT使用XPath对XML文档中的具体部分进行访问和引用 FO FormatObject 用于格式化XML文档的语言 用来格式化输出 是一种定义XML显示方式的语言 使用XSL定义XML文档显示方式的基本思想是 通过定义转换模板 将XML源文档转换为带样式信息的可浏览文档 最终的可浏览文档可以是HTML格式 FO格式 或者其它面向显示方式描述的XML格式 限于目前浏览器的支持能力 大多数情况下是转换为一个HTML文档进行显示 XSL处理器在进行显示输出时 首先根据XML文档构造源树 由于XML文档是严格的层级结构 所以我们形象地称XML文档为文档树 其中每个元素称作树的一个节点 根元素就是根节点 然后根据给定的XSLT 使用XPath在XML源树进行相关导航 并将源树转换为可以显示的结果树 这个过程称作树转换 最后再按照FO解释结果树 产生一个可以在屏幕上 纸上 语音设备或其它媒体中输出的结果 这个过程称作格式化 至今W3C还未能给出FO的一个统一标准 但是XSLT却日趋成熟 其正式推荐标准于1999年11月16日发布 现在一般所说的XSL大都指的是XSLT XSLT的主要用途就是数据转换应用 由于以XML为基础的电子商务广泛普及 XSLT作为数据转换的角色也越来越重要 例如直接将电视新闻的数据格式转换成报纸新闻需要的数据格式 对EDI 电子数据交换 数据进行统计 排序等等 XSLT是完成这类工作的理想工具 本章着重介绍XSLT对XML文档的显示转换功能 并将XPath作为XSLT的基础进行介绍 对于FO只作简要介绍 4 3 2XSLT初步 XSLT主要的功能就是转换 它将一个没有外观样式信息的XML文档作为一个源树 将其转换为一个有样式信息的结果树 在XSLT文档中定义了与XML文档中各个逻辑成分相匹配的模板 以及匹配转换方式 通过XSLT 可以给输出文件添加或移除元素和属性 也可重新排列元素 执行测试并决定隐藏或显示哪个元素等等 XSLT只是一种说明性的计算机语言 需要借助其他工具来实现转换 这个工具就是XSLT处理器 XSLT处理器是根据XSLT文档 将源XML文档转换为目标文档的工具 XSLT处理器并非由W3C提供 而是由一些厂商或个人自行开发的 目前最常用的几种XSLT处理器有 Xalan 是Apache公司提供的一款XSLT处理器 开发语言为Java 支持XSLT1 0 Saxon 是由英国的MichaelKay公司开发的XSLT处理器 其新版本支持XSLT2 0 MSXML 是微软开发的XSLT处理器 支持XSLT1 0 MSXML已经被集成到IE浏览器中 但需要IE6 0以上的版本才会支持 我们可以在XML文档中指定所使用的XSLT样式文档 然后使用IE浏览器打开该XML文档 直接查看转换后的结果 下面通过一个XSLT文档的例子 让读者初步掌握XSLT的基本语法和功能 清单4 5是一个XSLT文档 名为mystyle xsl 用于转换清单4 2的XML文档 这里 为了把XSL样式表链接到XML文档 清单4 2的XML文档的第一行之后 样式单声明语句应这样添加 清单4 5 图书信息titleauthor 其中 XSL样式表本身也是一个XML文档 因此它有XML声明 定义该文档是一个XSLT样式单文档 包括XSLT版本号和命名空间两个属性 version属性说明样式表只采用XSLT1 0的标准功能 如需使用XSLT的元素 属性以及特性 我们必须在文档开头声明XSLT命名空间 和XML中的命名空间一样 用来防止元素名称重复和混乱 其中前缀xsl表示文档中使用的元素遵守W3C的XSLT规范 注意 还可以用xsl transform来声明样式单XSL 它和xsl stylesheet是完全同义的 元素定义了一个模板 属性match 说明XML源文档中 这个模板规则作用的起点 是一种XPath语法 在4 3 4节进行介绍 这里的 代表XML树型结构的根 root 模板元素内部的内容定义了输出到结果文档的HTML代码 当模板规则被触发 模板的内容就会控制输出的结果 元素可用于选取指定的节点集中的每个XML元素 select属性的值是一个XPath表达式 该表达式的工作方式类似于定位某个文件系统 在其中正斜杠可选择子目录 元素用于提取某个选定节点的值 并把值添加到转换的输出流中 select属性指定要处理的节点名称 也是使用XPath语法 具体的就是找到和元素 然后将元素的值按模板样式拷贝到输出文档 最后两行分别是模板的结束标记及样式表的结束标记 图4 3是使用样式单的XML文档在浏览器中的显示效果 图4 3使用清单4 5的XSL显示XML文档 XSLT转换既可以在客户端进行 也可以在服务器端进行 两者分别对应着不同的转换模式 客户端转换模式这种方式是将XML和XSL文档都传送到客户端 由浏览器实时转换 采用这种模式的前提是浏览器必须支持XML和XSL 服务器端转换模式由于不是所有的浏览器都支持XML和XSL 因此可以考虑在服务器上将XML转换成HTML的方法 XSL设计的目的之一就是使得在服务器上将数据从一种格式转换成另一种格式成为可能 并将可读数据返回到所有未来的浏览器中 在服务器上进行XSL转换正在成为未来Internet信息服务器工作任务的一个主要部分 同时我们将看到专用浏览器市场的发展 如 Braille 有声网络 网络打印机 手持PC 移动电话等 在这种模式下 XML文件下载到浏览器之前先转换成HTML 然后再将HTML文件发送至客户端进行浏览 这里又有两种方式 动态方式 即当服务器接到转换请求时再进行实时转换 这种方式无疑对服务器要求较高 静态方式 即预先将XML转换成HTML文件 接到请求后再调用转换好的HTML文件 第 页 4 3 3XSLT元素 通过前面的内容 读者已经对XSLT的基本概念和它的转换过程有了一定了解 下面介绍XSLT的具体语法 4 3 3 1xsl template和xsl apply templates元素模板 template 是XSLT中最重要的概念之一 模板用于规定附加于XML源文档上的转换方式 它类似于一个容器 用于存放一些样式信息 这些样式信息是作用于源树上的各种节点 并且可以自由地规定哪一种模板作用于哪一个节点 哪一个节点需要出现 哪一个节点不需要出现 经过转换的结果树 它的各个节点的关系与源树可以不同 XSLT文档就是由一个个的模板所组成的 任何一个XSLT文档至少包含一个模板 模板可以被拼装组合使用 也可以单独成块 不同的模板控制不同的输出格式 模板由两部分组成 匹配模式 matchpattern 和执行 简单地讲 匹配模式指定了XML源文档中哪一个节点将被模板处理 执行则定义输出的是什么格式 两部分使用的XSLT元素分别为xsl template和xsl apply templates 1 xsl template的语法是 xsl template元素的作用是定义一个新模板 该元素有四个属性 match 属性值是一个XPath表达式 指定该模板样式与源XML文档的何种元素相匹配 如果模板是最上层模板 则match属性的值应该为 表示根节点 该属性可选 如果省略 则必须设置name属性 name 为模板定义名称 从而使apply templates元素可以根据需要来指定使用的模板名称 该属性可选 如果省略 则必须设置match属性 mode 用于确定处理方式 并将它与一个具有匹配值的apply templates元素相匹配 该属性可选 prority 用于在相同的匹配间指定优先级 该属性可选 属性name priority和mode用于区别匹配同一节点的不同模板 这三个属性并不常用 match属性则控制模板的匹配模式 匹配模式是用来定位XML源文档中哪一个节点被模板处理 一个模板匹配一个节点 例如 以清单4 2的XML文档为例 下面的XSL代码说明模板匹配所有的book元素下面的代码说明模板匹配所有的title元素和所有的author元素 下面的代码说明模板匹配所有的父节点为book元素的title元素 下面的代码则说明模板匹配根节点 2 xsl apply templates的语法是 xsl apply templates元素用于向当前元素或当前元素的子元素应用模板 即用来执行哪一个节点被模板具体处理 可以将它理解为程序中调用子函数 该元素有两个属性 select 属性值是一个XPath表达式 规定要用模板来处理的节点 值为 选取整个节点集 该属性可选 如果省略 意味着将当前节点的所有子节点依次与模板相比较 一旦有匹配的模板则按照相应模板进行转换输出 mode 如果存在为相同元素定义的多个处理方法 那么用mode可以区分它们 该属性可选 xsl apply templates元素总是包含在xsl template元素中 比如 这段代码说明模板匹配整个文档 根节点 具体执行时处理根节点下所有book元素 而下面这段代码则表示模板匹配book节点 所有book下的子元素都将被处理 4 3 3 2xsl value of元素 xsl value of的语法是 xsl value of用于选取XML源文档中某个元素的值 并把它输出 该元素有两个属性 select 这是一个必需的属性 属性值是一个XPath表达式 规定了从哪个节点或属性来提取值 disable output escaping 该属性可选 属性默认值为 no 如果值为 yes 通过实例化元素生成的文本节点在输出时将不进行任何转义 比如如果设置为 yes 则 执行后 title元素中的内容将被单独显示出来 其中match book 定义模板匹配book节点 xsl value of语法说明需要输出一个节点的值 而select title 则定义需要被输出的元素为title xsl value of还有更多 更复杂的语法 因为是涉及寻找和定位的功能 将在后面的XPath语法中详细介绍 具备类似功能的还有xsl copy和xsl copy of元素 xsl copy的作用就是把当前正在应用xsl copy规则的节点从源文档拷贝到输出结果中 通过copy可以在输出结果中创建一个节点 这个节点同源文档中的当前节点具有相同的名称 相同的名空间 相同的类型 但是 当前节点的子节点 节点的属性 以及其它一些内容不能自动的进行拷贝 而是需要使用一定的语句才能拷贝 而xsl copy of元素则会将属性和子元素自动复制进来 下面用一个综合示例来帮助以上几种XSLT元素的理解 清单4 6是对清单4 2的XML源文档的样式单描述 清单4 6 图书信息 Title Artist 这段XSLT代码的执行过程分析如下 在XML声明和XSL声明之后 样式单利用声明XSL模板 并调用该模板 根据 系统最先匹配XML源文档的根节点 根节点用 表示 它的匹配方法在一对括起的源码中声明 按照这段代码 首先生成带有样式信息的HTML文档的开头一段代码 即 图书信息 接下来 系统看到了的指示 于是 将XML源树根节点的所有子节点 即所有book节点 与模板进行匹配 就象函数调用一样 现在系统找到了与book节点匹配的模板 就跳到用括起的 函数 中继续生成该模板下面的HTML代码 现在 系统又接到了新的指示 这条指示要求系统寻找当前book节点下名为title的子节点 并对其应用模板进行转换输出 系统于是找到与title节点匹配的模板 就跳到用括起的 函数 中继续生成该模板下面的HTML代码 Title 紧接着 指示输出当前title节点的内容 之后 系统继续输出HTML代码 至此 系统已处理完中的所有内容 可以 函数返回 了 系统返回到括起的源码中 用同样的方式处理下一个XSL指示 处理完毕 返回输出HTML代码 至此 模板已经全部处理 系统再对下一个book节点生成相应的内容 直到book节点全部处理完毕 最后 系统返回到模板 完成HTML最后的HTML代码 把以上HTML代码串起来 即生成结果文档 它在IE中的浏览效果如图4 4所示 图4 4使用清单4 6的XSL显示XML文档 4 3 3 3xsl for each元素 xsl for each的语法是 xsl for each元素可遍历指定的节点集中的每个节点 该元素是一个循环控制元素 它按照select属性的XPath表达式 搜索文档中与其相匹配的元素 如果XML文档有m个符合条件的元素 则会循环m次 清单4 7的XSL文档用于输出清单4 2的XML源文档中的所有图书的书名和作者 清单4 7 图书信息TitleAuthor 4 3 3 4xsl sort元素 xsl sort元素用于对选中的节点进行排序 元素的select属性值是一个XPath表达式 用于规定节点的排序关键字 清单4 8的XSL文档用于输出所有图书的书名和作者 并按照书名排序 清单4 8 图书信息TitleAuthor 4 3 3 5xsl if元素 xsl if的语法是 xsl if元素用于检验条件 它类似于编程语言中的if语句 该元素包含了一个模板 只有指定的条件成立时 才应用此模板 if元素的test属性规定要测试的条件 是一个必需的属性 清单4 9检测所有book节点的的price子节点 如果价格大于35 则输出这本图书的书名和作者 清单4 9 图书信息TitleAuthor 4 3 3 6xsl choose xsl when和xsl otherwise元素 xsl if语法没有else的属性 如果要进行多重条件测试 需要使用xsl choose xsl when xsl otherwise三个流程控制元素 xsl choose元素与xsl when xsl otherwise元素结合 可表达多重条件测试 首先测试xsl when条件 如果满足 则处理xsl when的内容 否则处理xsl otherwise的内容 相当于程序语言中的if else控制语句 下面这段XSL代码测试当前元素有没有color属性 如果有 则输出该属性 否则输出默认值 green 符号作为属性名的前缀 表示取得该属性的值 green 清单4 10在图书价格高于35时 向author列添加粉色的背景色 清单4 10 图书信息TitleAuthor 4 3 3 7xsl element元素 xsl element语法如下 xsl element元素可以用于用于在输出文档中创建元素节点 该元素有四个属性 name 规定新创建的元素名称 它是必需的属性 namespace 可选属性 规定元素的名称空间URI use attribute sets 可选属性 是空格分隔的属性集 该属性集包含了需要向元素添加的属性 例如 下面这段XSLT代码创建一个名为 Authors 的元素 该元素包含每个author元素的值 4 3 3 8xsl attribute元素 xsl attribute的语法是 xsl attribute元素常与xsl element元素结合出现 用于为新创建的元素添加属性 xsl attribute元素会替换名称相同的已有属性 能够使用xsl attribute元素的都是元素节点 并且xsl attribute元素的内容只能包含字符数据 该元素有两个属性 name 规定新创建的属性名称 它是必需的属性 namespace 可选属性 规定属性的名称空间URI 例如 下面的XSLT代码向picture元素添加source属性 并使用 images name 中的值为其赋值 4 3 3 9xsl text元素 xsl text的语法是 xsl text元素用于向输出写文本 即通过样式表生成文本节点 该元素可包含文本 实体引用 以及 PCDATA 属性disable output escaping是可选的 默认值为 no 如果值为 yes 通过实例化xsl text元素生成的文本节点在输出时将不进行任何转义 比如如果设置为 yes 则 将不进行转换 如果设置为 no 则被输出为 例如 清单4 11的XSL文档用于显示每本图书的title 如果不是最后一个或倒数第二本图书 则在每个书名之间插入 如果是最后一本图书 则在title后添加 如果是倒数第二本图书 则在title后添加 and 清单4 11 图书信息Titles and 4 3 3 10 xsl output元素 xsl output的语法是 xsl output元素定义了输出文档的格式 xsl output是顶层元素 top levelelement 必须是xsl stylesheet或xsl transform的子节点 该元素有十个属性 method 可选 标识用于输出结果树的总体方法 如果没有前缀 则标识此文档中指定的方法 必须是 xml html text 或不是NCName的限定名之一 如果有前缀 则展开并标识输出方法 method属性的默认值的选择如下所示 如果下列任何条件为真 默认的输出方法为 html 结果树的根节点包含元素子级 结果树中根节点的第一个元素子级 即文档元素 的扩展名称包含本地部分 html 任意大小写组合 和空命名空间URI 结果树中根节点的第一个元素子级之前的任何文本节点只包含空白字符 否则 默认的输出方法为 xml 如果没有元素或没有元素指定了method属性的值 应使用默认的输出方法 version 可选 设置输出格式的W3C版本号 仅在method html 或者method xml 时使用 encoding 可选 设置输出中编码属性的值 omit xml declaration 可选 yes 规定在输出中省略XML声明 no 规定应在输出中包含XML声明 默认是 no standalone 可选 规定XSLT处理器是否应输出独立文档声明 该值必须为yes或no 默认是 no Netscape6不支持该属性 doctype public 可选 规定DTD中要使用的公共标识符 即输出中DOCTYPE声明的PUBLIC属性的值 doctype system 可选 规定DTD中要使用的系统标识符 即输出中DOCTYPE声明的SYSTEM属性的值 cdata section elements 可选 一个空格分隔的元素列表 这些元素的文本内容应作为CDATA部分来输出 indent 可选 在输出结果树时是否要增加空白 该值必须为yes或no Netscape6不支持该属性 media type 可选 定义输出的MIME类型 数据的媒体类型 默认是 text xml Netscape6不支持该属性 在下面的例子中 输出是XML文档 版本1 0 字符编码方式被设置为 ISO 8859 1 输出会进行缩进 以增进可读性 下面的这个例子输出的则是HTML文档 版本4 0 字符编码方式为 ISO 8859 1 输出会进行缩进 以增进可读性 4 3 3 11xsl variable元素 xsl variable的语法是 xsl variable元素用于声明局部或全局的变量 如果被声明为顶层元素 则该变量是全局的 而如果在模板内声明 则变量是本地的 一旦设置了变量的值 就无法改变或修改该值 可以通过xsl variable元素的内容或通过select属性 向变量添加值 使用变量时需要使用符号 具体格式 变量名称 xsl variable元素有两个属性 name 是必需的属性 用于规定变量的名称 select 可选 定义变量的值 如果设置了select属性 xsl variable元素就不能包含任何内容 如果select属性含有文字字符串 则必须给字符串加引号 例如 下面的例子为变量 color 赋值 red 如果xsl variable元素只包包含name属性 且没有内容 则变量的值是空字符串 例如 下面的例子声明名为 flower 的变量 这个变量的值被赋为当前元素的color属性的值 如果当前元素没有color属性 则变量color的值被赋为 red red以上介绍了XSLT几种主要元素的使用方法 XSLT中还有很多其他的元素 例如 xsl import xsl include xsl number xsl param等 在这里不一一解释 4 3 4XPath简介 在利用XSLT进行转换的过程中 匹配的概念非常重要 进行节点匹配时需要大量用到XPath表达式 XSLT就是使用XPath对XML文档中的具体部分进行访问和引用的 XPath是一种用于在XML文档中导航的语言 掌握XPath是学习XSLT的关键 本节将简要介绍XPath的相关知识 4 3 4 1什么是XPath XPath是一种W3C标准 于1999年11月16日发布 它是一种在XSLT和XPointer中都采用的 用于定位XML文档部分内容的语言 和XSLT一样 XPath把XML文档当成一个节点树来进行定位和处理 元素 文本以及属性等都是XPath中的节点 XPath使用路径表达式在XML文档中进行导航并选取XML文档中的节点或者节点集 这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似 此外 XPath包含一个标准函数库 含有超过100个内建的函数 这些函数用于字符串值 数值 日期和时间比较 节点和QName处理 序列处理 逻辑值等等 XPath是XSLT标准中的主要元素 如果没有XPath方面的知识 就无法创建XSLT文档 4 3 4 2XPath相关术语 1 节点 Node 由于XPath是对XML文档节点树的一系列操作 因此明确XPath节点类型是很有必要的 本书第二章介绍了XML文档的逻辑结构 一个XML文档可以包含元素 CDATA 注释 处理指令等逻辑要素 其中元素还可以包含属性 并可以利用属性来定义命名空间 相应地 在XPath中 将节点划分为七种节点类型 元素 属性 文本 命名空间 处理指令 注释以及根节点 或文档节点 根节点 RootNode 根节点是一棵树的最上层 根节点是唯一的 树上其它所有元素节点都是它的子节点或后代节点 对根节点的处理机制与其它节点相同 在XSLT中对树的匹配总是先从根节点开始 元素节点 ElementNodes 元素节点对应于文档中的每一个元素 一个元素节点的子节点可以是元素节点 注释节点 处理指令节点和文本节点 可以为元素节点定义一个唯一的标识id 元素节点都可以有扩展名 它是由两部分组成的 一部分是命名空间URI 另一部分是本地的命名 文本节点 TextNodes 文本节点包含了一组字符数据 即CDATA中包含的字符 任何一个文本节点都不会有紧邻的兄弟文本节点 而且文本节点没有扩展名 属性节点 AttributeNodes 每一个元素节点有一个相关联的属性节点集合 元素是每个属性节点的父节点 但属性节点却不是其父元素的子节点 这就是说 通过查找元素的子节点可以匹配出元素的属性节点 但反过来不成立 只是单向的 再有 元素的属性节点没有共享性 也就是说不同的元素节点不共有同一个属性节点 对缺省属性的处理等同于定义了的属性 如果一个属性是在DTD声明的 但声明为 IMPLIED 而该属性没有在元素中定义 则该元素的属性节点集中不包含该属性 此外 与属性相对应的属性节点都没有命名空间的声明 命名空间属性对应着另一种类型的节点 注释节点 CommentNodes 注释节点对应于文档中的注释 例如 清单4 12的XML文档中 是文档节点 谢希仁是元素节点 而ISBN 7505387863 则是属性节点 命名空间节点 NamespaceNodes 每一个元素节点都有一个相关的命名空间节点集 在XML文档中 命名空间是通过保留属性声明的 因此 在XPath中 该类节点与属性节点极为相似 它们与父元素之间的关系是单向的 并且不具有共享性 处理指令节点 ProcessingInstructionNodes 处理指令节点对应于XML文档中的每一条处理指令 它也有扩展名 扩展名的本地命名指向处理对象 而命名空间部分为空 清单4 12 数据库系统概论王珊萨师煊高等教育出版社30 00计算机网络谢希仁电子工业出版社40 00 2 节点关系在XPath中 存在这样几种节点关系 父 Parent 每个元素以及属性都有一个父 例如 清单4 12中 book元素是title author publisher以及price元素的父 子 Children 元素节点可有零个 一个或多个子 例如 清单4 12中 title author publisher以及price元素都是book元素的子 兄弟 Sibling 是指拥有相同的父的节点 例如 清单4 12中 title author publisher以及price元素都是兄弟 祖先 Ancestor 某节点的父 父的父 等等 例如 清单4 12中 title元素的祖先是book元素和Books元素 后代 Descendant 某个节点的子 子的子 等等 例如 清单4 12中 Books的后代是book title author publisher以及price元素 3 上下文节点XPath表达式的计算环境称为它的上下文 任何运行 4 XPath的类型和运算符XPath中最基本的结构是表达式 计算表达式得到的结果称为对象 XPath对象可分为节点集 布尔值 字符串和数值四种类型 节点集 node set 节点集是通过路径匹配返回的符合条件的一组节点的集合 其它类型的数据不能转换为节点集 布尔值 boolean 由函数或布尔表达式返回的条件匹配值 与一般语言中的布尔值相同 有true和false两个值 布尔值可以和数值类型 字符串类型相互转换 字符串 string 字符串即包含一系列字符的集合 XPath中提供了一系列的字符串函数 字符串可与数值类型 布尔值类型的数据相互转换 数值 number 在XPath中数值为浮点数 可以是双精度64位浮点数 另外包括一些数值的特殊描述 如非数值NaN Not a Number 正无穷大infinity 负无穷大 infinity 正负0等等 number的整数值可以通过函数取得 另外 数值也可以和布尔类型 字符串类型相互转换 其中后三种数据类型与其它编程语言中相应的数据类型差不多 只是第一种数据类型是XML文档树的特有产物 可用在XPath表达式中的运算符有 加法 减法 乘法 div 除法 等于 不等于 大于 大于或等于 or 或 and 与 和mod 计算除法的余数 等 4 3 4 3XPath的位置路径表达式 XPath中最常用的一种表达式是位置路径 LocationPath 位置路径表达式通过指定涉及到的当前节点或文档根节点的位置来搜索XML树中的节点集 XPath的位置路径可以是绝对的 也可以是相对的 绝对路径就是从XML文档的根节点 开始按照元素在文档树中的具体位置指定一个绝对的路径 它的参照物就是文档的根节点 绝对路径起始于正斜杠 而相对路径不以正斜杠开头 它是指从当前所处的元素开始 以当前元素为参照物 经定位的条件寻找到目标元素 无论采用绝对路径还是相对路径 位置路径都包括一个或多个位置步 Locationstep 每个位置步用斜杠分隔 即 绝对定位路径 Locationstep Locationstep 相对定位路径 Locationstep Locationstep 每个位置步均根据当前节点集之中的节点来进行计算 在XPath中 位置步又包括三个部分 它们是轴 节点测试和谓词 下面我们详细介绍位置路径中的各个组成部分 1 位置步 Locationstep 所有的位置路径都由一个或多个位置步组成 每一步代表XML层次中的一层 像URL路径一样 Xpath中的位置步由斜杠 分隔 每个位置步又包括三个部分 轴 axis 轴用来定义所选节点与当前节点之间的树关系 节点测试 node test 节点测试识别某个轴内部的节点 零个或者多个谓词 predicate 谓词更深入地提炼所选的节点集 谓词可以没有 也可以有多个 位置步的语法是 轴名称 节点测试 谓词 2 Xpath轴 Axis 每个位置步的第一部分称为轴 它出现在双冒号 的左边 轴说明了当前节点和位置步中被选节点之间的关系 用于定义某个相对于当前节点的节点集 Xpath定义了13个轴 表4 1是轴名称及其描述 3 节点测试 Node test 位置步的第二部分是节点测试 它用双冒号 与轴分隔 节点测试允许从指定的轴中选择特定的元素或者节点类型 下面是几种节点测试 指定一个元素名称 该元素名称仅和具有该名字的节点相匹配 例如一个book节点测试仅和指定轴中称为book的元素匹配 通配符 号节点测试 用于指定轴中所有元素 node 节点测试 指定轴中所有节点 text 节点测试 指定轴中所有文本元素 comment 节点测试指定轴中所有注释元素 processing instruction 节点测试指定轴中所有的处理指令元素 而且在括号中给出名字 该测试仅仅匹配具有指定名字的那些处理指令元素 4 谓词 Predicates 位置路径中的谓词用于对节点集进行更深入的过滤 用来查找某个特定的节点或者包含某个指定的值的节点 谓词写在位置路径右边的方括号内 表4 2是XPath中选择节点时常用的谓词 下面列举几个位置路径表达式的例子帮助读者理解上述概念 child book选取所有属于当前节点的子元素的book节点 attribute ISBN选取当前节点的ISBN属性 child 选取当前节点的所有子元素 attribute 选取当前节点的所有属性 child text 选取当前节点的所有文本子节点 child node 选取当前节点的所有子节点 descendant book选取当前节点的所有book后代 descendant book descendant or self text 选取book元素和它后继中的所有文本节点 ancestor book选择当前节点的所有book祖先 ancestor or self book选取当前节点的所有book祖先或者当前节点 假如此节
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美甲合同转让协议书模板
- 花草租赁解除合同协议书
- 船员培训专项协议书模板
- 网页设计团队外包协议书
- 风力发电安装转让协议书
- 签了购房协议不给签合同
- 电梯加楼梯施工合同协议
- 职工餐厅承包合同协议书
- 门店分红股东协议书范本
- 腺肌病的护理
- 北京市朝阳区2024-2025学年高一下学期期末语文试题(含答案)
- 安徽高危人员管理办法
- 牙外伤护理配合课件
- 2025年辅警招聘考试试题及参考答案
- 2025年湖南省高考物理真题
- 党课课件含讲稿:以作风建设新成效激发干事创业新作为
- 腹膜透析相关性腹膜炎的护理查房
- 安措费使用计划报审表(施工报-监理审-业主批)
- 智慧市政系统解决方案
- 医疗期规定(表格化)
- GMC核算模型 国际企业管理挑战赛
评论
0/150
提交评论