关闭

学习笔记——XSL简介及入门

标签: xslxsltstylesheet文档xmltransformation
1120人阅读 评论(0) 收藏 举报
分类:

Extensible Stylescheet Language(XSL,可扩展样式单语言)

XSL本身也是一份XML文档。

 

作用:将一份XML文档转换成一份结构化文档(通常是HTML,当然也可以是XML)。

 

XSL的组成:

1:XSLT:XSL Transformation(XSLT),用于描述如何转换XML文档。

2:XPath:XSL使用XPath来识别、选择和匹配XML文档中的各种组件。

3:XSL-FO:Formatted Object在文档转换完成之后,可使用XSL-FO来解释结果树、格式化转换得到的文档。主要用于将XML转换成PDF。

 

XSLT入门

 
http://www.w3.org/1999/XSL/Transform是XSLT的命名空间URL

 

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


 

XSLT支持两个根元素,其效果和用法是完全一样的。

<xsl:stylesheet
  id = id
  extension-element-prefixes = tokens
  exclude-result-prefixes = tokens
  version = number>
  <!-- Content: (xsl:import*, top-level-elements) -->
</xsl:stylesheet>

 

<xsl:transform
  id = id
  extension-element-prefixes = tokens
  exclude-result-prefixes = tokens
  version = number>
  <!-- Content: (xsl:import*, top-level-elements) -->
</xsl:transform>

 

根元素可包含的子元素:

  • xsl:import

  • xsl:include

  • xsl:strip-space

  • xsl:preserve-space

  • xsl:output

  • xsl:key

  • xsl:decimal-format

  • xsl:namespace-alias

  • xsl:attribute-set

  • xsl:variable

  • xsl:param

  • xsl:template

 

XSLT处理器会将XML文档当成一颗结构化的树进行处理,XSLT的根节点问XML文档本身。

 

包含另一份XSLT

<!-- Category: top-level-element -->
<xsl:include
  href = uri-reference />

 

注意事项:

1:<include../>元素之前只能出现<import.../>元素;

2:包含的样式单必须完整;

3:如果原样式单与包含的样式单发生冲突,将导致XSLT文档出错。

 

解决模板冲突的方法:使用<template.../>元素的prioprity属性,定义优先级别,默认优先级在-0.5到0.5之间。

 

导入另一份XSLT

<xsl:import
  href = uri-reference />

 

注意事项:

1:原样式单里的模板优先级比导入的样式单高。

2:后导入的样式单里的模板优先级比先导入的高。

 

<!-- Category: instruction -->
<xsl:apply-imports />

<apply-imports.../>用于调用被覆盖的模板规则。

 

示例:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="article.xsl"/>
  <xsl:import href="bigfont.xsl"/>
  <xsl:attribute-set name="note-style">
    <xsl:attribute name="font-style">italic</xsl:attribute>
  </xsl:attribute-set>
</xsl:stylesheet>


 

 

 

XSLT模板规则

<!-- Category: top-level-element -->
<xsl:template
  match = pattern
  name = qname
  priority = number
  mode = qname>
  <!-- Content: (xsl:param*, template) -->
</xsl:template>

 

XSLT通常是由多个模板组成,并由<template.../>元素定义。

<template.../>作用:定义一个模板替换XML中指定元素。

 

<template.../>使用:

1:使用match属性指定对对哪些XML节点转换。

2:转换<template.../>元素内的内容。

3:可选用mode属性来区分多个模板。

 

<apply-templates.../>用于处理子节点

作用:在<template.../>元素内,通知XSLT使用模板转换子节点。

可选属性:

select:指定一个XPath表达式,处理XPath表达式所代表的节点。若未指定,则依次处理当前节点集内的每个子节点。

mode:用于区分多个模板

 

XSLT的内置模板规则

1:匹配所有的元素节点和根节点,并处理它们:

<xsl:template match="*|/">
	<xsl:apply-templates/>
</xsl:template

 

2:匹配所有的元素节点和根节点,同时指定模式(m是一个通配符),并处理它们:

<xsl:template match="*|/" mode="m">
	<xsl:apply-templates/ mode="m">
</xsl:template

 

3:匹配所有的文本节点和属性,并直接输出它们:

<xsl:template match="text()|@*">
	<xsl:value-of select="."/>
</xsl:template

 

4:匹配所有处理指令和注释:

<xsl:template match="processing-instruction()|comment()"/>


 

 

Values of Variables and Parameter

 

<!-- Category: instruction -->
<xsl:value-of
  select = string-expression
  disable-output-escaping = "yes" | "no" />

 

<value-of.../>用于输出XML节点的内容,

其支持的属性:

select:必需属性,指定一个XPath表达式,输出表达式内容对应的字符串;

disable-output-escaping:可选属性,用于是否禁用转义。

 

使用注意事项:

1:当<value-of.../>转换包含子节点元素的节点时,采用深度优先法则。

2:输出属性、注释、处理指令时,直接输出其内容。

 

示例:

 

name.xml

<?xml version="1.0" encoding="GBK"?>
<?xml-stylesheet type="text/xsl" href="name.xslt"?>
<name>
	<first>bruce</first>
	<last>zhang</last>
</name>

 

name.xslt

<?xml version="1.0" encoding="GBK"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<!-- 匹配跟节点的模板 -->
	<xsl:template match="/">
		<html>
			<head>
				<title>MyName</title>
			</head>
			<body>
				<h3>My Name</h3>
				<xsl:apply-templates/>
				<hr/>
				<xsl:apply-templates mode="other"/>
			</body>
		</html>
	</xsl:template>

	<!-- 定义匹配name节点的模板 -->
	<xsl:template match="name">
		<ul>
			<li>first:<xsl:value-of select="first"/></li>
			<li>last:<xsl:value-of select="last"/></li>
		</ul>
	</xs:template>

	<xsl:template math="name" mode="other">
		<table style="border:3px solid #666666; background-color:#999999;">
			<tbody>
				<tr>
					<th>first:</th>
					<td><xsl:value-of select="first"/></td>
				</tr>
				<tr>
					<th>last:</th>
					<td><xsl:value-of select="last"/></td>
				</tr>
			</tbody>	
		</table>
	</xsl:template>
</xsl:stylesheet>










   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:66042次
    • 积分:1311
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档