第6章 使用XSL格式化显示XML文件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章 使用 章 使用XSL格式化显示 格式化显示 XML文件 文件
6.1 XSL的特点 6.2 XSL变换步骤 6.3 XSL的文件结构 6.4 XSL的模式语言 6.5 XSL的常用控制标记 6.6 其它常用XSL标记
6.1 XSL的特点 的特点
XSL通过路径的方式来定位数据,从而可以轻易地提取出特定的 数据。 XSL提供了循环、条件、选择等控制语句。从这方面讲,XSL更接 近于程序设计语言。 XSL文件是由标记组成的,是一种特殊的XML文件。 XSL不仅可以实现CSS的所有功能,还可以实现CSS做不到的功能。 XSL的内容涉及两个部分:变换语言(XSL Transformation,XSLT) 和格式化语言(XSL Formatting Objects,XSL-FO)。
表示message标记的子标记中“id”属性值为2的persion标记。
message/persion[*/tel]
表示该路径下含有tel孙标记的persion标记。
XSL的路径匹配模式(7) 的路径匹配模式( ) 的路径匹配模式
5.复合条件匹配 所谓的复合匹配条件,就是把前面所介绍的几种单一条件结合到一 起,使之成为一个具有多重约束条件的一个语句。例如:
表示取出来的是第二条记录。 集合索引函数包括index()和end()。index()表示当前一组标记中的 第几个,0表示第一个。end()表示当前一组标记中的最后一个。
返回
6.5 XSL的常用控制标记 的常用控制标记
6.5.1 循环标记<for-each> 6.5.2 选择标记<if> 6.5.3 选择标记<choose> 6.5.4 求值标记<value-of>
第一条语句表示取出具有id属性且属性值为2的persion标记的id属性值, 第二条语句表示取出具有id属性且属性值为2的persion标记的name子标 记的标记内容。 如果只是输出当前标记的内容,则select属性可以省略。
返回
6.6 其它常用 其它常用XSL标记 标记
6.6.1 <template>标记和<apply-templates>标记 6.6.2 <copy>标记 6.6.3 <comment>标记 6.6.4 <script>标记和<eval>标记 6.6.5 <element>标记
message/persion[(age$gt$'18')$and$($not$(sex$ieq$'female'))]
表示子标记age的内容大于18且子标记sex的内容不是female的 persion标记。上面的语句还可以写成:
message/persion[(age$gt$'18')][$not$(sex$ieq$'male')]
XSL的路径匹配模式(2) 的路径匹配模式( ) 的路径匹配模式
1.使用任意深度匹配符“//” 该符号的作用是定位指定标记的后代标记中具有某些特征的标记, 中间可以间隔任意级别的标记。例如:
//tel
表示从文件的根开始搜索,遇到“tel”标记就输出其标记的内容, 与tel标记的具体位置没有关系。表示所有的“tel ”标记。而:
关系运算符 = != < <= > >= $eq$ $ieq$ $ne$ $ine$ $lt$ $ilt$ $le$ $ile$ $gt$ $igt$ $ge$ $ige$ 特殊编码 说明 相等(区分大小写) 相等(不区分大小写) 不等(区分大小写) 不等(不区分大小写) 小于(区分大小写) 小于(不区分大小写) 小于等于(区分大小写) 小于等于(不区分大小写) 大于(区分大小写) 大于(不区分大小写) 大于等于(区分大小写) 大于等于(不区分大小写)
<?xml-stylesheet type=”text/xsl” href=”XSL文件的URI” ?>
3.应用程序会将其变换称为一个HTML文件。 应用程序(例如IE6.0)会自动将XML文件和相关联的XSL文件 变换称为一个HTML文件。 返回
6.3 XSL的文件结构 的文件结构
一个XSL样式文件的最基本的结构如下:
<?xml version="1.0" ?> XML声明编码也必须和其关联的 XML文件编码一致。
<xsl:stylesheet version="1.0" xmlns:xsl="/TR/WD-xsl"> <xsl:template math="/"> 内容描述 </xsl:template> </xsl:stylesheet> XSL样式文件的根标记必须是“stylesheet”,必须包含版本声 明。 使用的名称空间是 “/TR/WD-xsl” , 名称空前所使用的前缀一般是 “xsl”。 根模板
XSL的路径匹配模式(4) 的路径匹配模式( ) 的路径匹配模式
3.匹配标记的内容 匹配标记的内容就是根据标记的某种特定内容来定位标记。例如:
message/persion[name='小李']
表示满足条件:标记persion的子标记name的标记内容为‘小李’ 。 两个运算符:“$any$”:表示只要有一个标记满足条件。 “$all$”:表示所有的标记都要满足条件。 例如:
标记<if>只能判断满足某个条件时需要做哪些事情,而不满 足的情况则无法处理。也就是说,在XSL里没有“if-else”结构。 标记<choose>则可以做到多选一的功能,例如:
<xsl:choose> <xsl:when test="sex[value()$eq$'male']"> <td align="center">男</td> </xsl:when> …… <xsl:otherwise> <td align="center" bgcolor='yellow'>未知</td> </xsl:otherwise> </xsl:choose>
注意:只有逻辑与才可以分开写成几个方括号连接的形式。
XSL的路径匹配模式(8) 的路径匹配模式( ) 的路径匹配模式
6.使用集合索引函数 在XSL中,使用各种条件来过滤数据,有时得到的结果可能不只 一个。如果我们想取出其中的某一条记录,就需要使用集合索引函数。 例如:
message/persion[@id$and$index()=1]
表示循环遍历persion标记内容,并按name标记和age标记内容排 序。排序的方法是:先按照name标记的内容进行排序,如果name标 记的内容相同,再按照age标记的内容进行排序。如果不使用order-by 属性,则以XML文件中出现的顺序排序。 返回
选择标记<if> 选择标记
与其他程序设计语言相似,根据某个逻辑条件来决定程序是否执 行。例如:
//lxfs/tel
表示具有父标记为lxfs特征的tel标记。
XSL的路径匹配模式(3) 的路径匹配模式( ) 的路径匹配模式
2.使用通配符“*” 通配符“*”表示任意名称的标记,它可以匹配任意标记。例如:
lxfs/*
表示标记lxfs的所有子标记。 注意:通配符“*”可以代替任意名称的标记,一个“*”只能代替一 级标 记,如果是多级标记,可以用“message/*/*/tel”的形式,表 示的路径可以是“message/persion/lxfs/tel”等。
这个标记不但可以取到某个标记的值,还可以取到某个标记的某个 属性的值。通过select属性来设定取值条件,如果满足条件的有多个记 录,则输出这些记录中的第一条。例如:
<xsl:value-of select="/message/persion[@id$eq$'2']/@id" /> <xsl:value-of select="/message/persion[@id$eq$'2']/name" />
返回
循环标记<for-each> 循环标记
<for-each>允许循环处理满足由select属性中指定的匹配条件的标 记。<for-each>标记还有一个属性order-by,该属性用来给满足条件的 一组标记排序,例如:
<xsl:for-each select="message/persion" order-by="name;age" > …… </xsl:for-each>
/message/persion/name/lxfs/tel
返回
XSL的路径匹配模式(1) 的路径匹配模式( ) 的路径匹配模式
XSL的路径匹配模式就是通过一些条件的描述来选出特定的数据, 有以下一些形式: 1.使用任意深度匹配符“//” 2.使用通配符“*” 3.匹配标记的内容 4.匹配标记的属性及子标记 5.复合条件匹配 6.使用集合索引函数
返回
6.2 XSL变换步骤 变换步骤
利用XSL来格式化XML文件需要通过下面的步骤: 1.为需要显示的XML文件编写相应的XSL文件。 XSL文件所采用的编码必须和对应的XML文件的编码一致,保 存后的XSL文件的扩展名为“.xsl”。 2.把XML文件和相应的XSL文件相关联。 XML文件关联XSL文件类似于关联CSS文件,需要在文件的开头 加入下面一条语句:
XSL的路径匹配模式(6) 的路径匹配模式( ) 的路径匹配模式
4.匹配标记的属性及子标记 根据标记所具有的属性或子标记的不同来选出具有某些特征的 标记。例如:
message/persion[@id]
表示查找具有“id”属性且父标记为message的persion标记。
message/persion[@id$eq$’2’]
message/persion[$any$name='小李']
表示标记persion的子标记中只要有一个name的标记内容为‘小 李’ 。
XSL的路径匹配模式(5) 的路径匹配模式( ) 的路径匹配模式
3.匹配标记的内容 在这个模式下需要用到的关系运算符有:相等“=”、不等“!=”、 小于“<”、小于等于“<=”、大于“>”和大于等于“>=”。在XSL 中,这些符号都有特殊的编码,见下表:
<xsl:if test="sex[.='male']"> …… </xsl:if>
还可以写成:
<xsl:if test="sex[value()$eq$'male']"> …… </xsl:if>
注意:<if>标记中,属性test是必选属性,用来设置过滤条件。
返回
选择标记<choose> 选择标记
<choose>标记含有两个子标记<when>和<otherwise>,一个<choose> 标记可以含有多个<when>子标记,每个<when>表示一种情况,一般最后 有一个<otherwise>子标记,表示如果前面的<when>情况都不满足,则执 行<otherwise>里的动作。 返回
求值标记<value-of> 求值标记
返回
6.4 XSL的模式语言 的模式语言
6.4.1 相对定位和绝对定位
6.4.2 XSL的路径匹配模式
返回
相对定位和绝对定位( ) 相对定位和绝对定位(1) 定位
绝对定位法 绝对定位法就是相对于文件的根给出一个路径来定位到数据,这 个路径称之为绝对路径。 例如,计算机文件系统中路径“C:\WINNT\system32\notepad.exe ” 就是一个绝对路径。 用XSL格式化XML时,总是先定位到XML文件的根。文件的根用 “/”表示。 所以,绝对路径以“/”开头,向后依次为各级子标记, 各级标记用“/”隔开,代表父XML文档的根标记是“message”, “persion”标记是 “message” 标记的子标记, “name” 标记是“persion”标记的子标记。
相对定位和绝对定位 (2) )
相对定位法 相对定位法是指相对于当前的位置来定位数据,这时的路径是一 个相对路径。相对路径是一个相对位置的描述,表示从当前位置出发, 通过这个相对路径,就可以找到特定的数据。 相对路径都不以“/”开始,“..”表示上一级标记。例如:假设 当前位置是“/message/persion” ,则路径“lxfs/tel”就表示相对于当前 位置下的“tel”标记。代表的绝对路径是:
6.1 XSL的特点 6.2 XSL变换步骤 6.3 XSL的文件结构 6.4 XSL的模式语言 6.5 XSL的常用控制标记 6.6 其它常用XSL标记
6.1 XSL的特点 的特点
XSL通过路径的方式来定位数据,从而可以轻易地提取出特定的 数据。 XSL提供了循环、条件、选择等控制语句。从这方面讲,XSL更接 近于程序设计语言。 XSL文件是由标记组成的,是一种特殊的XML文件。 XSL不仅可以实现CSS的所有功能,还可以实现CSS做不到的功能。 XSL的内容涉及两个部分:变换语言(XSL Transformation,XSLT) 和格式化语言(XSL Formatting Objects,XSL-FO)。
表示message标记的子标记中“id”属性值为2的persion标记。
message/persion[*/tel]
表示该路径下含有tel孙标记的persion标记。
XSL的路径匹配模式(7) 的路径匹配模式( ) 的路径匹配模式
5.复合条件匹配 所谓的复合匹配条件,就是把前面所介绍的几种单一条件结合到一 起,使之成为一个具有多重约束条件的一个语句。例如:
表示取出来的是第二条记录。 集合索引函数包括index()和end()。index()表示当前一组标记中的 第几个,0表示第一个。end()表示当前一组标记中的最后一个。
返回
6.5 XSL的常用控制标记 的常用控制标记
6.5.1 循环标记<for-each> 6.5.2 选择标记<if> 6.5.3 选择标记<choose> 6.5.4 求值标记<value-of>
第一条语句表示取出具有id属性且属性值为2的persion标记的id属性值, 第二条语句表示取出具有id属性且属性值为2的persion标记的name子标 记的标记内容。 如果只是输出当前标记的内容,则select属性可以省略。
返回
6.6 其它常用 其它常用XSL标记 标记
6.6.1 <template>标记和<apply-templates>标记 6.6.2 <copy>标记 6.6.3 <comment>标记 6.6.4 <script>标记和<eval>标记 6.6.5 <element>标记
message/persion[(age$gt$'18')$and$($not$(sex$ieq$'female'))]
表示子标记age的内容大于18且子标记sex的内容不是female的 persion标记。上面的语句还可以写成:
message/persion[(age$gt$'18')][$not$(sex$ieq$'male')]
XSL的路径匹配模式(2) 的路径匹配模式( ) 的路径匹配模式
1.使用任意深度匹配符“//” 该符号的作用是定位指定标记的后代标记中具有某些特征的标记, 中间可以间隔任意级别的标记。例如:
//tel
表示从文件的根开始搜索,遇到“tel”标记就输出其标记的内容, 与tel标记的具体位置没有关系。表示所有的“tel ”标记。而:
关系运算符 = != < <= > >= $eq$ $ieq$ $ne$ $ine$ $lt$ $ilt$ $le$ $ile$ $gt$ $igt$ $ge$ $ige$ 特殊编码 说明 相等(区分大小写) 相等(不区分大小写) 不等(区分大小写) 不等(不区分大小写) 小于(区分大小写) 小于(不区分大小写) 小于等于(区分大小写) 小于等于(不区分大小写) 大于(区分大小写) 大于(不区分大小写) 大于等于(区分大小写) 大于等于(不区分大小写)
<?xml-stylesheet type=”text/xsl” href=”XSL文件的URI” ?>
3.应用程序会将其变换称为一个HTML文件。 应用程序(例如IE6.0)会自动将XML文件和相关联的XSL文件 变换称为一个HTML文件。 返回
6.3 XSL的文件结构 的文件结构
一个XSL样式文件的最基本的结构如下:
<?xml version="1.0" ?> XML声明编码也必须和其关联的 XML文件编码一致。
<xsl:stylesheet version="1.0" xmlns:xsl="/TR/WD-xsl"> <xsl:template math="/"> 内容描述 </xsl:template> </xsl:stylesheet> XSL样式文件的根标记必须是“stylesheet”,必须包含版本声 明。 使用的名称空间是 “/TR/WD-xsl” , 名称空前所使用的前缀一般是 “xsl”。 根模板
XSL的路径匹配模式(4) 的路径匹配模式( ) 的路径匹配模式
3.匹配标记的内容 匹配标记的内容就是根据标记的某种特定内容来定位标记。例如:
message/persion[name='小李']
表示满足条件:标记persion的子标记name的标记内容为‘小李’ 。 两个运算符:“$any$”:表示只要有一个标记满足条件。 “$all$”:表示所有的标记都要满足条件。 例如:
标记<if>只能判断满足某个条件时需要做哪些事情,而不满 足的情况则无法处理。也就是说,在XSL里没有“if-else”结构。 标记<choose>则可以做到多选一的功能,例如:
<xsl:choose> <xsl:when test="sex[value()$eq$'male']"> <td align="center">男</td> </xsl:when> …… <xsl:otherwise> <td align="center" bgcolor='yellow'>未知</td> </xsl:otherwise> </xsl:choose>
注意:只有逻辑与才可以分开写成几个方括号连接的形式。
XSL的路径匹配模式(8) 的路径匹配模式( ) 的路径匹配模式
6.使用集合索引函数 在XSL中,使用各种条件来过滤数据,有时得到的结果可能不只 一个。如果我们想取出其中的某一条记录,就需要使用集合索引函数。 例如:
message/persion[@id$and$index()=1]
表示循环遍历persion标记内容,并按name标记和age标记内容排 序。排序的方法是:先按照name标记的内容进行排序,如果name标 记的内容相同,再按照age标记的内容进行排序。如果不使用order-by 属性,则以XML文件中出现的顺序排序。 返回
选择标记<if> 选择标记
与其他程序设计语言相似,根据某个逻辑条件来决定程序是否执 行。例如:
//lxfs/tel
表示具有父标记为lxfs特征的tel标记。
XSL的路径匹配模式(3) 的路径匹配模式( ) 的路径匹配模式
2.使用通配符“*” 通配符“*”表示任意名称的标记,它可以匹配任意标记。例如:
lxfs/*
表示标记lxfs的所有子标记。 注意:通配符“*”可以代替任意名称的标记,一个“*”只能代替一 级标 记,如果是多级标记,可以用“message/*/*/tel”的形式,表 示的路径可以是“message/persion/lxfs/tel”等。
这个标记不但可以取到某个标记的值,还可以取到某个标记的某个 属性的值。通过select属性来设定取值条件,如果满足条件的有多个记 录,则输出这些记录中的第一条。例如:
<xsl:value-of select="/message/persion[@id$eq$'2']/@id" /> <xsl:value-of select="/message/persion[@id$eq$'2']/name" />
返回
循环标记<for-each> 循环标记
<for-each>允许循环处理满足由select属性中指定的匹配条件的标 记。<for-each>标记还有一个属性order-by,该属性用来给满足条件的 一组标记排序,例如:
<xsl:for-each select="message/persion" order-by="name;age" > …… </xsl:for-each>
/message/persion/name/lxfs/tel
返回
XSL的路径匹配模式(1) 的路径匹配模式( ) 的路径匹配模式
XSL的路径匹配模式就是通过一些条件的描述来选出特定的数据, 有以下一些形式: 1.使用任意深度匹配符“//” 2.使用通配符“*” 3.匹配标记的内容 4.匹配标记的属性及子标记 5.复合条件匹配 6.使用集合索引函数
返回
6.2 XSL变换步骤 变换步骤
利用XSL来格式化XML文件需要通过下面的步骤: 1.为需要显示的XML文件编写相应的XSL文件。 XSL文件所采用的编码必须和对应的XML文件的编码一致,保 存后的XSL文件的扩展名为“.xsl”。 2.把XML文件和相应的XSL文件相关联。 XML文件关联XSL文件类似于关联CSS文件,需要在文件的开头 加入下面一条语句:
XSL的路径匹配模式(6) 的路径匹配模式( ) 的路径匹配模式
4.匹配标记的属性及子标记 根据标记所具有的属性或子标记的不同来选出具有某些特征的 标记。例如:
message/persion[@id]
表示查找具有“id”属性且父标记为message的persion标记。
message/persion[@id$eq$’2’]
message/persion[$any$name='小李']
表示标记persion的子标记中只要有一个name的标记内容为‘小 李’ 。
XSL的路径匹配模式(5) 的路径匹配模式( ) 的路径匹配模式
3.匹配标记的内容 在这个模式下需要用到的关系运算符有:相等“=”、不等“!=”、 小于“<”、小于等于“<=”、大于“>”和大于等于“>=”。在XSL 中,这些符号都有特殊的编码,见下表:
<xsl:if test="sex[.='male']"> …… </xsl:if>
还可以写成:
<xsl:if test="sex[value()$eq$'male']"> …… </xsl:if>
注意:<if>标记中,属性test是必选属性,用来设置过滤条件。
返回
选择标记<choose> 选择标记
<choose>标记含有两个子标记<when>和<otherwise>,一个<choose> 标记可以含有多个<when>子标记,每个<when>表示一种情况,一般最后 有一个<otherwise>子标记,表示如果前面的<when>情况都不满足,则执 行<otherwise>里的动作。 返回
求值标记<value-of> 求值标记
返回
6.4 XSL的模式语言 的模式语言
6.4.1 相对定位和绝对定位
6.4.2 XSL的路径匹配模式
返回
相对定位和绝对定位( ) 相对定位和绝对定位(1) 定位
绝对定位法 绝对定位法就是相对于文件的根给出一个路径来定位到数据,这 个路径称之为绝对路径。 例如,计算机文件系统中路径“C:\WINNT\system32\notepad.exe ” 就是一个绝对路径。 用XSL格式化XML时,总是先定位到XML文件的根。文件的根用 “/”表示。 所以,绝对路径以“/”开头,向后依次为各级子标记, 各级标记用“/”隔开,代表父XML文档的根标记是“message”, “persion”标记是 “message” 标记的子标记, “name” 标记是“persion”标记的子标记。
相对定位和绝对定位 (2) )
相对定位法 相对定位法是指相对于当前的位置来定位数据,这时的路径是一 个相对路径。相对路径是一个相对位置的描述,表示从当前位置出发, 通过这个相对路径,就可以找到特定的数据。 相对路径都不以“/”开始,“..”表示上一级标记。例如:假设 当前位置是“/message/persion” ,则路径“lxfs/tel”就表示相对于当前 位置下的“tel”标记。代表的绝对路径是: