XSL的一些基础知识!
XSL相当与网页中的CSS!
1 <xsl:template
name= Qname
match = Pattern
priority = number
mode = QName
</xsl:template>
name
要展开的限定名。 如果有前缀,前缀将使用出现名称的属性上的有效命名空间声明展开为统一资源标识符 (URI) 引用。 扩展名称由名称的本地部分以及可能的空 URI 引用组成,作为模板的名称。 没有前缀的名称不使用默认的命名空间。 如果 <xsl:template> 元素有 name 属性,可以(但是不需要)同时有 match 属性。
match
标识应用规则的源节点的模式。 match 属性是必选项,除非 <xsl:template> 元素有 name 属性。 <xsl:template> 元素的内容是在应用模板规则时实例化的模板。
模式是一种表达式,根据节点的一组条件返回一组节点。 符合条件的节点与模式匹配。 模式语法是表达式语法的一个子集。 特别是,符合特定限制的位置路径可以作为模式使用。 如果表达式同时也是模式,将总是计算为节点集类型的对象。 如果某个节点是将模式作为表达式(与某些可能的上下文有关)的计算结果的成员,则表示该节点符合模式;这里可能的上下文是其上下文节点属于匹配节点或其上级之一的上下文。
下表列出了模式的示例。
模式 |
匹配 |
Para |
任何 para 元素 |
* |
任何元素 |
chapter|appendix |
任何 chapter 元素和任何 appendix 元素 |
olist/item |
任何具有 olist 父级的 item 元素 |
appendix//para |
任何具有 appendix 祖先元素的 para 元素 |
/ |
根节点 |
text() |
任何文本节点 |
processing-instruction() |
任何处理指令 |
node() |
除了属性节点和根节点以外的任何节点 |
id("W11") |
具有唯一 ID W11 的元素 |
para[1] |
任何属于父级的第一个 para 子元素的 para 元素 |
*[position()=1 and self::para] |
任何属于父级的第一个子元素的 para 元素 |
para[last()=1] |
任何属于父级的唯一一个 para 子元素的 para 元素 |
items/item[position()>1] |
任何具有 items 父级但不是父级的第一个 item 子元素的 item 元素 |
item[position() mod 2 = 1] |
任何属于父级的奇数个 item 子元素的 item 元素 |
div[@class="appendix"]//p |
任何 div 祖先元素具有值为 appendix 的 class 属性的 p 元素 |
@class |
任何 class 属性(不是任何具有 class 属性的元素) |
@* |
任何属性 |
XSL解析XML需要用到
/ |
根节点 |
。
2 for-each
|
|
<xsl:for-each select = Expression </xsl:for-each> |
select
必选项。表达式 在当前上下文中计算,确定要循环访问的节点集。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="foreach.xsl" ?>
<customers>
<customer>
<name>John Smith</name>
<address>123 Oak St.</address>
<state>WA</state>
<phone>(206) 123-4567</phone>
</customer>
</customers>
</xml>
解析用的
<xsl:for-each select="customers/customer">
<xsl:sort select="state" order="descending"/>
<xsl:sort select="name"/>
3 <xsl:sort
select = string-expression
lang = { nmtoken }
data-type = { "text" | "number" | QName }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" }
/>
指定根据 <xsl:for-each> 或 <xsl:apply-templates> 选择的节点列表的排序条件。
select
节点的排序关键字。 将指定节点作为当前节点并将未排序进行处理的完整节点列表作为当前节点列表计算的表达式。 生成的对象转换为字符串,作为该节点的排序关键字。 select 属性的默认值为 "."。 这样,当前节点的字符串值将作为排序关键字使用。
order
字符串的排序顺序。 默认值为 "ascending"。
4 <xsl:value-of
select = Expression
disable-output-escaping = "yes" | "no"
</xsl:value-of>
select
必选项。 要根据当前上下文计算的表达式。 通过调用 string() 函数,将结果转换为字符串。 通过插入节点集中第一个节点的字符串值,将节点集转换为字符串。
disable-output-escaping
默认值为 "no"。 如果值为 "yes",通过实例化 <xsl:value-of> 元素生成的文本节点在输出时将不进行任何转义。
5 <xsl:text
disable-output-escaping = "yes" | "no">
</xsl:text>
通过样式表生成文本节点。 在输出中保留纯空白节点。
在样式表中,生成的文本可以是包含或不包含 <xsl:text> 的文本结果树。 但是,通过此元素可以对样式表创建的空白进行一定的控制。 例如,为了更容易阅读样式表,可能需要在模板上每行编写一个元素,并在某些行上缩进。 这样做可以使空白成为模板规则的一部分。有时,可能需要使用空白字符分隔两个数据值。 可以使用 <xsl:text> 元素实现这一点。 <xsl:text> 中的空白将输出到结果树中。
6 <xsl:if
test = boolean-expression
</xsl:if>
允许简单条件模板片断。
test
必选项。 源数据中要测试的条件。 如果此属性中的表达式在被强制转换为布尔值时计算为 True,<xsl:if> 的内容便会实例化并放入输出。如果节点集至少包含一个节点,将强制转换为布尔值。
内容是模板。 将计算该表达式,并将生成的对象转换为布尔值。 如果结果为 True,内容模板将实例化;否则,不会创建任何内容。
例子
在此示例中,一个名称组中的名称格式化为通过逗号分隔的列表。
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="ifcomma.xsl" ?>
<namelist>
<name>Albert</name>
<name>Terrance</name>
<name>Will</name>
<name>Sylvia</name>
<name>Timothy</name>
<name>Gordon</name>
<name>James</name>
<name>Robert</name>
<name>Dan</name>
<name>Sasha</name>
</namelist>
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="namelist/name">
<xsl:apply-templates/>
<xsl:if test="position()!=last()">, </xsl:if>
</xsl:template>
</xsl:stylesheet>
另外一种方法
<xsl:if test="position()!=1">, </xsl:if>
隔行换颜色
<xsl:if test="position() mod 2 = 0">
<xsl:attribute name="bgcolor">yellow</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
7 <xsl:attribute
name = "attribute-name"
namespace = "uri-reference">
</xsl:attribute>
创建一个属性节点并将其附加到输出元素上。
name
必选项。 要创建的属性的名称。 如果此值为限定名称 (QName),属性节点将在当前绑定到前缀上的命名空间中创建,除非 namespace 属性重写此值。 name 属性的值被解释为属性值模板(如同在 <xsl:value-of> 元素中一样,对大括号中的表达式进行计算并转换为字符串)。这样,可以从源 XML 计算或获取属性名称。
XML 文件 (myelem.xml)
Xml |
复制代码 |
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="attrcopied.xsl" ?> <root> <myElement>My Data</myElement> <myElement>My Other Data</myElement> </root> |
XSLT 文件 (attrcopied.xsl)
Xml |
复制代码 |
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:template match="myElement"> <xsl:copy> <xsl:attribute name="copied">true</xsl:attribute> <xsl:apply-templates /> </xsl:copy> </xsl:template> </xsl:stylesheet> |
输出
以下是格式化输出:
My DataMy Other Data
以下是处理器输出,为了清楚起见,增加了分行符。
<?xml version="1.0"?>
<myElement copied="true">My Data</myElement>
<myElement copied="true">My Other Data</myElement>
不会影响到用户看到的内容
XSL的一些基础知识!相关推荐
- 公务员考试中公共基础知识计算机,2015山西省公务员考试公共基础知识考试重点和考试技巧...
2015山西省公务员考试公共基础知识考试重点和考试技巧 1.在使用Word文本编辑软件时,要把文章中所有出现的"计算机"都改成"computer",可选择___ ...
- 嵌入式Linux的OTA更新,基础知识和实现
嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...
<计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...
- python向量计算库教程_NumPy库入门教程:基础知识总结
原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...
- python常用变量名_python基础知识整理
Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...
- 计算机基础知识掌握欠缺,《计算机基础知识》实验教学改革探讨.pdf
<计算机基础知识>实验教学改革探讨.pdf Science& TechnologyVision 科 技 视 界 科技 探·索·争鸣 计<算机基础知识>实验教学改革探讨 ...
- python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)
前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...
最新文章
- es了解集群中属性 4
- 微服务架构 — Overview
- c++实现全局优化的了望算法
- python 画系统关联图_Python基于pyecharts实现关联图绘制
- support v4官方下载_掌心长兴客户端下载-掌心长兴ap下载v4.1.4 安卓官方版
- 数字孪生+交通,到底有啥用?
- 火狐浏览器插件(XPI 文件)签名指南
- 【WIN7安装Github遇到的问题】
- 比较重要的物料管理交易代码列表
- 机电工程系计算机网络技术,我院物联网工程专业3+1及计算机网络技术专业2+1项目正式开营...
- MAC 下卸载 MySQL
- linux 解压war到root_解压war包的解压软件 war包可以用解压工具解开吗
- 测试LOL帧数的软件,lol手游画质帧率修改器
- 【maya】学习历程
- esp32+超声波传感器测距
- 函数:计算字符串中大写字母的个数
- CyanogenMod源码下载和编译
- 【游戏程序设计】Direct 3D 三维地形系统
- PTA 1031 查验身份证 (c语言)
- cad捕捉不到标注线上的点_CAD捕捉不到正在绘制的多段线上的点怎么办