XSLT基础+模板+输出
1、XSLT是一门语言
2、XSLT有一个输入XML源文档,有一个输出XML目标文档
3、XSLT的主要工作是为节点(元素,属性等)定义处理模板
4、使用XPath进行节点寻址
5、XPath的意义在于描述XML文档的结构
6、XPath表达式计算结果可以是节点集合,字符串,数值,布尔值
7、XPath表达式语法
节点:元素,属性,注释等都可以看做节点,属性和属性值被看做一个节点,元素和元素的文本内容被看做两个节点。
根节点,XPath根节点可以看做XML源文档本身是根元素的父节点,用“/”表示。
上下文节点:用“.”来表示,可视为正在处理的节点。
用元素名来代表元素节点如,用<item>来代表上下文节点下所有<item>子元素集合。
属性节点:用@+属性名来表示,如@id
用*表示上下文节点的所有属性节点。
用@*表示上下文节点的所有属性节点。
用..表示上下文节点的父元素。
所有节点:用node()函数表示所有类型的节点。
用text()函数表示所有文本节点。
用“/”表示父子关系。
用“//”表示祖先后代节点items//item表示以元素<items>为祖先的所有<item>元素节点。
用“|”表示并列,a|b表示元素<a>和<b>的节点集。
约束关系:用[]括号内的表达式来建立约束items/item[1]表示<items>下的第一个<item>元素。
常用函数
curren()返回当前节点,参数:无,返回值:节点集。
document(url)使用外部XML文档,参数:URL字符串必须。
emlement-available(string)判断元素可用性,参数,元素名,返回值布尔值,只有可做为<xsl:template>子元素出现的XSLT元素才会返回true
format-number(number,format)函数--格式化数字,把指定数字转换成指定格式,会四舍五入,如无法转换返回NaN
function-available(string),函数,判断函数可用性。
generate-id(node)函数 生成节点id,参数节点可选,返回整,为第个节点生成唯一id,不提供参数时返回上下文(当前)节点的id,注意每次转换时id都不同。
key(string,object)返回索引中的节点集合。
system-property(string)返回系统属性,返回XPath表达式。
count(node-set):统计节点个数,参数节点集必须,返回值整数。
position()函数,返回节点的位置,参数,无;返回值,整数,返回上下文节点的位置。
last()函数--返回节点总数。
name(node-set)函数--返回节点名称,参数缺省时返回节点集合中第一个节点的名称
XPath字符串函数
concat(string1,string2,string3,...)返回连接后的字符串。
contain(string1,string2),string1是否包含string2.
normaliza-space(string)格式化空白字符。
starts-with(string1,string2)函数--string1是否以string2开头
string-length(string),返回字符串长度,参数如果缺省返回当前节点字符串长度
substring(string,number,length)--把参数string,从参数number位置开始截取参数length个并返回结果
substring-before(string1,string2),返回string1中位于string2之前的字符串
substring-after(string1,string2),返回string1中位于string2之后的字符串
translate(string,replaced_text,replacement_text),把string中的replaced_text用replacement_text替换
//XPath数值函数
ceiling(number)--上取整
floor(number) -- 下取整
number(xpathExpression)把XPath表达式转为数值
round(number)--四舍五入
sum(node-set)节点集合计算节点集所代表数值的和
//XPath布尔形函数
boolean(xpathExpression)把表达转换成布尔值
false()--返回false
not(xpathExpression)--取反操作
true()--返回true
/////////////XSLT运算符////////////////////////////
+ - * div(除法) mod(取模)
and , or
= != <(<) <=(<=) >(&rt;) >=(&rt;=)
XSLT(eXtensible Stylesheet language Transformation)
1.XSLT用来将XML文档转换成其它格式的文件(html,TEXT,xml)
2.XSLT的最新版本是2.0,IE6.0支持XSLT1.0
3.XSLT本质上也是XML文档:
4.XSL和XSLT:css是HTML的样式语言,XSL是XML的样式语言,XSL分两部分:XSLT和FO
5.XSLT的专用命名空间:http://www.w3.org/1999/XSL/Transform
6.XSLT处理器:Xalan,是Apache的产品,Saxon,是英国人Michael Kay开发的,MSXML,Microsoft的产品,集成到IE中
7.使用Sylus Studio 创建一个简单的XSLT文档
8.在Sylus Studio中设置参数:output metiod:可选择输出方法如,text,html等,output指定输出编码格式,Indent定输出文档中的元素是否换行处理,大多时选是
9.分析第一个XSLT文档,看7-2.xsl例中注释
10.在浏览器中使用XSLT,在XML文档中指定XSLT样式表
11.注意事项:XSLT本身就是XML文档,所以头部的<?xml>不能省略,xmlns命名空间的指定不能改
理解模板
xslt为XML中的每个节点都定义了一组处理规则,它们都是一个模板。模板定义只能出现在XSLT文件的顶层结构
语法:
<xsl:template match="pattern" name="Qname" priority="number" mode="mode">
<!-- sequence-constructor-->
</xsl:template>
说明:
1属性match 可选,指定处理的节点,如果没有这个属性那么一定要有name属性,这里的pattern不是XPath表达式,只是一个节点模式
2属性name 可选,为模板指定名称,称为命名模板,如果没有这个属性那么一定要有match属性
3.priority 可选 为模板指定优先极,数值最大的会被执行
4.mode 可选,指定在一个节点有多个模板时,调用时用mode属性区分
调用节点模板:
语法:
<xsl:apply-templates match="node-set" mode="mode">
<!-- Content:template-->
</xsl:apply-templates>
说明:
1.属性match 可选,指定要调用哪些节点的模板
2.指定模板的mode值 ,select属性用于指定节点,如果没有定义select将调用上下文节点的所有子节点的模板
调用命名模板:
语法:
<xsl:call-template name="templateName">
<!-- <xsl:with-param />-->
</xsl:call-template>
说明:
name 可选,指定被调用的模板名
<xsl:with-param>用于向模板传参
模板冲突:
1基本冲突:选择后定义的模板处理,
2.mode属性的使用:可以区分具有多个相同match属性的模板,此属性一定同时存在模板和调用元素中9-7,可以根据要求的变化选择不同的模板。
3.设置优先级:
.1显示定义priority,取值要大于0.5,-0.5到0.5为系统默认极别
包含模板:可以在一个模板中包含或导入其它模板,包含的模板具有相同级别的优先级
语法
<xsl:include href="URI" />
说明:
href指定XSLT文档的URI
导入模板:
<xsl:import href="URI" />
导入的模板的优先级小于现有模板
XSLT执行过程:
.1入口点:为根节点的模板
.2哪些模板会被指行:要看是否被调用
.3模板调用顺序和XML文档无关
内嵌模板:如果未显示指定一个节点的模板,此节点将使用内嵌模板
规则如下:
.1元素节点和根节点:
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
.2文本节点和属性节点:输出节点的值
<xsl:template match="text()|@*">
<xsl:value-of select="." />
</xsl:template>
模板递归:是指执行过程是反复调用某个模板
.1节点模板的递归
.2命名模板递归:要指定退出条件
XSLT应用——输出
输出文档控制:
语法:
<xsl:output method="xml" version="1.1" encoding="UTF-8" omit-xml-declaration="yes" standalone="no" indent="yes" />
说明:
.1 method
html不输出XML文档声明
text只输出节点的文本
.2 encoding
3.indent:自动换行和缩进
输出文本--<xsl:value-of select=".">
说明:、
select 必选,指定一个XPath表达式
disable-output-escaping,可选,是否禁用输出字符转义,default为no
.1输出复杂元素: <xsl:value-of>主要应用就是输出元素的文本内容,如果一个元素很复杂,包含有多个子元素,将输出所有子节点的文本内容
.2输出节点集合:XPath返回节点集合时,只输出第一个节点的内容
.3节点复制
.3.1 <xsl:copy>元素用来复制上下文节点,只复制开始和结束标签。use-attribute-sets是一个可选属性 定义一个空白符分隔的属性集列表,在列表中出现的属性集都被输出到目标文档中,要使用此属性,必须在XSLT文档中预先定义属性集
.3.2<xsl:copo-of>元素用来完全复制某个节点,包括子元素、属性、文本内容
.4生成元素<xsl:element>用于动态生成元素:use-attribute-sets是一个可选属性定义一个空白符分隔的属性集列表,在列表中出现的属性集都被输出到目标文档中,要使用此属性,必须在XSLT文档中预先定义属性集
.4.1:动态生成元素名
.4.2:特殊名称空间元素
.5生成属性--<xsl:attribute>
.5.1动态生成属性:10-18(19)
.5.2使用xsl:attribute指令:10-20(21)
.5.3属性所依附的元素是<xsl:element>方式生成的:10-22(23)
.5.4生成XSLT文档:10-24(25)
.6输出指令:<xsl:processing-instruction name="p-name" />10-26(27)
.7输出注释<xsl:comment>10-28(29)
.8输出消息-<xsl:message>,10-30(32)
.9替换命名空间:<xsl:namespace-alias>元素,10-33(34)
.10<xsl:decimal-format>10-35(38)
.11阻止命名空间的输出10-39(41)
.12空白符对输出的影响
.12.1无意义空白符10-42(43) 10-44:<xsl:strip-space>删除无意义空白符
.12.2有意义空白符:<xsl:strip-space>元素对有意义空白符不起作用,10-45(46)