将XSLT作为HTML的样式表的使用方法示例.docx
- 文档编号:28325661
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:19
- 大小:20.83KB
将XSLT作为HTML的样式表的使用方法示例.docx
《将XSLT作为HTML的样式表的使用方法示例.docx》由会员分享,可在线阅读,更多相关《将XSLT作为HTML的样式表的使用方法示例.docx(19页珍藏版)》请在冰豆网上搜索。
将XSLT作为HTML的样式表的使用方法示例
将XSLT作为HTML的样式表的使用方法示例
简介
当听到样式表这个词时,您可能会想到CSS样式表。
XSLT样式表通常用于XML转换,比如在Web服务之间映射数据。
因为XSLT非常适合此用途,所以创建了顶层元素 transform>别名,虽然这很少使用。 这种XSLT转换的输入结构与输出结构有很大的不同。 最重要的是,命名空间的不同。 XSLT样式表的输入结构与输出结构相似,但却更简单些。 其中已经扩充了一些标记,但大部分标记只是原样复制到输出。 输入和输出的命名空间是相同的(HTML)。 输入文档也可以包含样式表指令(比如创建脚注),这些指令属于另一个命名空间,不会传递到输出中。 常用缩略语 CSS: 级联样式表 XHTML: 可扩展超文本标记语言 XPath: XML路径语言 XSLT: 可扩展样式表语言转换 在本文中,我们将学习如何使用XSLT样式表扩充XHTML文档。 文中的示例展示了如何使用指令,如何引用其他源文档的部分,以及如何使用链接在主文档中导航。 此外,我们还探索了页面的解释和编译之间的区别。 CSS样式表的局限性 XSLT样式表不会阻止您使用其他技术,比如JavaScript或CSS。 CSS适用于字体、加粗、颜色、间距等。 它不适合将来自不同位置的信息组合在一起,比如脚注、模块或生成一个目录。 这正是XSLT的用武之地,它补充而不是替代了CSS。 XSLT用途示例 实际上,您可以将XSLT代码集中在一个文件中。 为了简单起见,本文中的每个示例均位于一个独立的XSLT文件中,除了一些必要的代码。 清单1给出了必需的代码。 清单1.必需的代码(位于samples/common.xml中) XML/HTMLCode stylesheet auto;height: auto;float: none;"id="24_nwp"> none;"mpid="24"target="_blank"href="id="24_nwl"> #0000ff;font-size: 14px;width: auto;height: auto;float: none;">xmlns="http: //www.w3.org/1999/xhtml" xmlns: h="http: //www.w3.org/1999/xhtml" xmlns: a=" xmlns: s="http: //www.w3.org/1999/XSL/Transform" exclude-result-prefixes="ah" version="1.0" > templatematch="h: auto;height: auto;float: none;"id="25_nwp"> none;"mpid="25"target="_blank"href="id="25_nwl"> #0000ff;font-size: 14px;width: auto;height: auto;float: none;">head"> copy> apply-templatesselect="@*|node()"/> http-equiv="content-type" content="text/html;charset=UTF-8"/> href="common. auto;height: auto;float: none;"id="26_nwp"> none;"mpid="26"target="_blank"href="id="26_nwl"> #0000ff;font-size: 14px;width: auto;height: auto;float: none;">css" rel="stylesheet" type="text/css"/> copy> template> templatematch="*"> copy> copy-ofselect="@*"/> apply-templates/> copy> template> stylesheet> XHTML的命名空间定义了两次: 默认定义和h: 。 默认命名空间用于编写输出XHTML标记,其中应该避免使用命名空间前缀。 h: 用在XPath表达式中。 本文使用XSLT1.0版本。 目前,大部分浏览器都无法解释XSLT2.0。 但是,如果XSLT运行在服务器上,那么它可能是一个实用的选择。 XSLT2.0还提供了: XPATH2.0(if…then…else和许多内置的函数) 内置和用户编写的XPATH函数 分组 在清单1中: s: templatematch="head"扩充了源文档的head一节,添加了一个CSS样式表的链接。 即使UTF-8是在XML中的默认编码,一些浏览器也需要内容类型才能呈现它。 s: templatematch="*"是默认的详细副本。 原则上,所有内容都会复制到目标文档中。 如果遗漏了此模板,只会将标记的文本内容复制到目标文档。 不会复制处理指令节点。 本文中的所有其他示例都是导入common.xsl的独立文件。 扩充 通过扩充,添加了一个未在源文档中显式请求的特性。 一个示例是清单1中的CSS样式表的链接。 尝试另一个示例,向每个内部链接添加一个小箭头(^v),指明目标在它之前还是之后。 清单2给出了该样式表。 清单2.样式表(在samples/linkUpDown.xsl中) XML/HTMLCode stylesheet auto;height: auto;float: none;"id="22_nwp"> none;"mpid="22"target="_blank"href="id="22_nwl"> #0000ff;font-size: 14px;width: auto;height: auto;float: none;">xmlns="http: //www.w3.org/1999/xhtml" xmlns: h="http: //www.w3.org/1999/xhtml" xmlns: s="http: //www.w3.org/1999/XSL/Transform" version="1.0" > importhref="common.xsl"/> templatematch="h: a[starts-with(@href,'#')]"> copy> copy-ofselect="@*"/> variablename="name"select="substring-after(@href,'#')"/> choose> whentest="preceding: : h: a[@name=$name]"> text>^ text> when> whentest="following: : h: a[@name=$name]"> text>v text> when> choose> apply-templates/> copy> template> stylesheet> 首先,导入清单2中的通用样式表。 模板与内部链接(以'#'开头)相匹配。 如果链接指向的锚点位于链接之前,那么使用一个向上箭头扩充该链接(如果情况相反,则使用向下箭头)。 s: copy-of和s: apply-templates可确保不会沿途丢下任何内容。 清单3给出了一个示例文档(其中包含内部链接),它经过了清单2中的样式表进行扩充。 清单3.源文档(在samples/linkUpDown.xml中) XML/HTMLCode auto;height: auto;float: none;"id="20_nwp"> none;"mpid="20"target="_blank"href="id="20_nwl"> #0000ff;font-size: 14px;width: auto;height: auto;float: none;">xml-stylesheethref="linkUpDown.xsl"type="text/xsl"? > //www.w3.org/1999/xhtml"> < auto;height: auto;float: none;"id="21_nwp"> none;"mpid="21"target="_blank"href="id="21_nwl"> #0000ff;font-size: 14px;width: auto;height: auto;float: none;">head/> Thislinkgoes Reducethesizeofthewindowtoverifythelinkreallyworks. Thislinkgoes