XML学习之XSLT:一、介绍和入门

        XSL(eXtensible Stylesheet Language)可扩展样式语言,主要用于将一个Xml文档转换成另外的文档(如Html文档等),以及定义转换后的文档的显示外观。XSL实际上包含了3种语言:XSL转换(XSLT)、XML路径语言(XPath)、XSL格式化对象(XSL-FO)。XSLT主要用于将一个XML文档转化为其他的XML文档或其他类型的文档。XPath主要用于识别、选择、匹配XML文档中的各个组成部分,包括元素、属性、文本内容等。XSL-FO定义了许多XML标记,这些标记描述了应如如何显示内容,XSL-FO的一个主要应用就是讲XML文档转化为PDF文件。

       XSLT是基于XML的语言,这意味着XSLT文档本身就是格式良好的XML文档。<xsl:stylesheet>是XSLT的根元素,它有两个必须的属性:version和xmlns:xsl(其值为:http://www.w3.org/1999/XSL/Transform)。XSLT对源文档、结果文档和样式表文档使用同样的数据模型来操作,也就是采用同样的树形机构。不过需要注意的是,处理指令和注释在样式表中被忽略,样式表被看做既没有处理指令节点,又没有注释节点的样式表树

        XSLT样式表有一组模版规则组成,模版规则包含了两个部分:模式和模版。模式用于在源文档树中匹配(定位)节点,模版定义节点处理规则,通过模版的实例化来组成结果数的一部分。当一个模板实例化的时候,它总是相对于当前节点和当前节点列表来实例化。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="welcome.xsl"?>
<Welcome>
	<Title>这是一个标题栏</Title>
	<Content>这是一个内容栏</Content>
</Welcome>

welcome.xml

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<html>
			<xsl:apply-templates/>
		</html>
	</xsl:template>
	<xsl:template match="Welcome">
		<head>
			<title>
				<xsl:value-of select="Title"/>
			</title>
		</head>
		<body>
			<h3/>
			<div>这是显示区</div>
			<xsl:value-of select="Content"/>
		</body>
	</xsl:template>
</xsl:stylesheet>

welcome.xsl

 

         <xsl:apply-templates>元素
         <xsl:apply-templates>元素用于告诉处理器处理当前节点的所有子节点。在模版中使用该元素,告诉XSLT处理器将匹配的节点的每一个子节点(包括文本节点)与样式表中的模板规则进行比较,如果找到了匹配的模板规则,那么就可以为匹配的节点输出模版。该模版有一个select属性,使用这个属性是告诉处理器只处理子节点中的XXX节点。

      

        <xsl:value-of>元素

        该节点用于在结果树中创建一个文本节点。该元素有一个必须的属性select,用于指定要计算的表达式,表达式计算的结果被转化为一个字符串值,用这个字符串值来创建一个文本节点。

<xsl:template match="employee">
	<xsl:value-of select="name"/>
</xsl:template>

       

        <xsl:for-each>元素

        该元素有一个必需的表达式select,用于指定一个表达式,该表达式计算的结果必须是一个节点集。该元素用于在一个节点集中依次选取每一个节点,被选择的节点被当成当前节点。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<html>
			<head/>
			<body>
				<xsl:apply-templates/>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="employees">
		<div>
			<table bgcolor="#123123" border="2">
				<xsl:for-each select="employee">
					<tr>
						<td width="100px" align="center">
							<xsl:value-of select="name"/>
						</td>
						<td width="100px" align="center">
							<xsl:value-of select="age"/>
						</td>
						<td width="100px" align="center">
							<xsl:value-of select="month_pay"/>
						</td>
					</tr>
				</xsl:for-each>
			</table>
		</div>
	</xsl:template>
</xsl:stylesheet>

 

        Mode属性

        当需要对一个元素多次处理,且每次处理的结果(样式)不一致时,可以对元素<xsl:template>和<xsl:apply-templates>使用Model属性,只有这两个元素中的mode属性指定了同样的值,模版规则才会被匹配。如果<xsl:template>没有使用match属性,那么它也不能有mode属性。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<html>
			<head/>
			<body>
				<xsl:apply-templates/>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="employees">
		<div>第一次展示数据:
		<table border="1">
				<tbody>
					<xsl:apply-templates select="employee" mode="table"/>
				</tbody>
			</table>
		</div>
		<br/>
		<div>第二次展示数据:
		<xsl:apply-templates select="employee" mode="list"/>
		</div>
		<div>第三次展示数据:
			<table bgcolor="#123123" border="2">
				<xsl:for-each select="employee">
					<tr>
						<td width="100px" align="center">
							<xsl:value-of select="name"/>
						</td>
						<td width="100px" align="center">
							<xsl:value-of select="age"/>
						</td>
						<td width="100px" align="center">
							<xsl:value-of select="month_pay"/>
						</td>
					</tr>
				</xsl:for-each>
			</table>
		</div>
	</xsl:template>
	<xsl:template match="employee" mode="table">
		<tr>
			<td width="100px" align="center">
				<xsl:value-of select="name"/>
			</td>
			<td width="100px" align="right">
				<xsl:value-of select="age"/>
			</td>
			<td width="100px" align="right">
				<xsl:value-of select="month_pay"/>
			</td>
		</tr>
	</xsl:template>
	<xsl:template match="employee" mode="list">
		<ul>
			<li>
				<xsl:value-of select="name"/>
			</li>
			<li>
				<xsl:value-of select="age"/>
			</li>
			<li>
				<xsl:value-of select="month_pay"/>
			</li>
		</ul>
	</xsl:template>
</xsl:stylesheet>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值