XSLT元素

一、元素

        apply-imports:应用来自导入样式表中的模版规则。因为导入样式表中的模版规则优先级比主样式表中的低,所以当需要使用导入样式表中的模版规则时需要使用此元素。

        apply-templates:当前元素或子元素应用模版。具有以下属性:
                select:要处理的节点。若为“*”表示整个节点集,若不设置,表示当前节点的所有子节点。
                mode:如果存在为相同元素定义的多个处理方法,可以用mode进行区分。
        attribute:添加属性,会替换名称相同的已有属性。具有以下属性:
                 name:属性名称。
                 uri:属性所在命名空间URI。

        attribute-set:创建可命名的属性集,可做为整体应用到输出文档。必须是 <xsl:stylesheet> 或 <xsl:transform> 的子节点。具有以下属性:
                name:属性集名称。
                use-attribute-sets:可在该属性集中使用的空格分隔的其他属性集列表。
        call-template:调用一个指定的模版。
                name:被调用的模版名称。
        choose:与<xsl:when> 以及 <xsl:otherwise> 元素结合,进行多重条件选择。如果没有 <xsl:when> 是 true,则处理 <xsl:otherwise> 的内容。如果没有 <xsl:when> 是 true,且不存在 <xsl:otherwise> 元素,则不创建任何内容。如果只是简单的选择可以使用if元素代替。
        comment:在结果树中创建注释节点。
        copy:创建当前节点的一个副本,节点的namespace会被自动复制,但是当前节点的子节点和属性不会被复制。具有以下属性:
                use-attribute-sets:如果被复制节点是元素,那么此属性为应用到输出节点的空格分隔的属性集列表。
        copy-of:创建当前节点的一个副本,与copy不同的是除了namespace以外,当前节点的子节点与属性也会被复制。具有以下属性:
                select:指定要拷贝的内容。
        decimal-format:定义通过format-number() 函数把字符转换为字符串时,使用的格式。该元素为顶层元素。具有以下属性:
                name:格式名称。format-number() 函数可以通过此名称引用此元素。
                decimal-separator:小数点字符,默认为“.”。
                grouping-separator:千的分隔字符,默认为“,”。
                infinity:表示无穷大的字符,默认为“Infinity”。
                minus-sign:表示负数的字符,默认为“-”。
                NaN:当值不是数字时使用的字符,默认为“NaN”。
                percent:百分比符号,默认为“%”。
                per-mille:千分比符号,默认为“‰”。
                zero-digit:数字0的字符,默认为“0”。
                digit:规定字符,表示需要使用数字的地方,默认为“#”。
                pattern-separator:规定字符,分隔模式中的正负次模式,默认为“;”。
        element:在输出文档中创建一个元素节点。具有以下属性:
                name:要创建的元素名称。
                namespace:元素命名空间的URI。
                use-attribute-sets:需要项元素添加的空格分隔的属性集列表。
        fallback:处理器不支持XSLT元素时,所指定的替代代码。
        for-each:遍历指定节点集中的每个节点。具有以下属性:
                select:被处理的节点集。
        if:包含一个模版,当条件成立时应用此模版。具有以下属性:
                test:要测试的条件。
        import:把一个样式表中的内容导入到另一个样式表,被导入的样式优先级低于当前的样式,此元素必须是<xsl:stylesheet> 或 <xsl:transform> 的第一个子节点。具有以下属性:
                href:要导入的样式表的URI。
        include:把一个样式表中的内容包含到另一个样式表中,被导入的样式与当前的样式优先级相同,此元素必须是<xsl:stylesheet> 或 <xsl:transform> 的子节点。具有以下属性:
                href:要包含的的样式表的URI。
        key:声明一个命名的键,通过key()函数在样式表中使用,键可以不是唯一的。此元素为顶层元素。具有以下属性:
                name:键的名称。
                match:定义键应用到哪个节点。
                use:做为键的值使用的表达式,可以是属性、子元素或者匹配元素的内容。
        message:向输出写一条消息。主要用于报告错误。具有以下属性:
                terminate:可选值有:yes(在消息写入输出后,终止处理)、no(在消息写入输出后,继续进行处理),默认为no。
        namespace-alias:把样式表中的命名空间替换为输出中不同的命名空间。此元素为顶层元素。具有以下属性:
                stylesheet-prefix:要更改的命名空间。
                result-prefix:期望的命名空间。
        number:测定在源中当前节点的整数位置,同时还可以对数字进行格式化。具有以下属性:
                count:要计数的节点,XPath表达式。
                level:如何分配序号,可选值有single、multiple、any。默认为single。
                from:XPath 表达式,指定从何处开始计数。
                value:用户提供的数字,用于代替产生的序号。
                format:定义数字的输出格式。可选值为:
                        1:生成的序列为:1 2 3 4 5 ... 10 11 12 ...
                        01:生成的序列为:01 02 03 ... 19 10 11 ...
                        a:生成的序列为:a b c ...
                        A:生成的序列为:A B C ...
                        i:生成的序列为:i ii iii iv v vi vii viii ix x...
                        I:生成的序列为:I II III IV V VI VII VIII IX X...
                lang:用于编号的语言字母表。
                letter-value:消除使用字母的编号序列之间的歧义。可选值有alphabetic(字母序列)、traditional(其他序列),默认为alphabetic。
                grouping-separator:分隔组或数字的字符,默认为“,”。
                grouping-size:分组大小,默认为3。
        otherwise :指定了<xsl:choose> 元素的默认行为。在没有 <xsl:when> 的条件触发时,将发生该行为。
        output:定义输出文档的格式,顶层元素。具有以下属性:
                method:定义输出格式,可选值有xml、html、text、name,默认为xml。
                version:输出格式的版本,仅在method为html或xml时有效。
                encoding:输出的编码。
                omit-xml-declaration:输出中是否省略xml声明,yes(省略)、no(包含),默认为no。
                standalone:XSLT处理器是否应该输出独立文档声明。默认为no。
                doctype-public:指定 DTD 中要使用的公共标识符。
                doctype-system:指定 DTD 中要使用的系统标识符。
                cdata-section-elements:空格分隔的元素列表,这些元素的文本内容做为CDATA部分输出。
                indent:在输出结果树时是否要增加空白。
               media-type:定义输出的 MIME 类型,默认是 "text/xml"。
        param:声明局部或全局参数。具有以下属性:
                name:参数的名称。
                select:参数的默认值。
        preserve-space:指定保留空白的元素。具有以下属性:
                elements:空格分隔的元素列表,此外可以设置“*”表示所有元素,“prefix:*”,表示特定命名空间的所有元素。
        processing-instruction:向输出写一条处理指令,即生成处理指令节点。具有以下属性:
                name:处理指令的名称。
        sort:对结果进行排序,只能位于<xsl:for-each> 或 <xsl:apply-templates> 内部。具有以下属性:
                select:用于节点排序的关键字,即根据哪个节点或节点集排序。
                lang:排序所用的语言。
                data-type:被排序的数据类型,可选值为text、number、qname,默认为“text”。
                order:排序顺序,可选值为ascending、ascending,默认为ascending。
                case-order:是否首先按大(小)写字母进行排序,可选值为upper-first、lower-first。
        strip-space:指定保留空白的元素。具有以下属性:
                elements:空格分隔的元素列表,此外可以设置“*”表示所有元素,“prefix:*”,表示特定命名空间的所有元素。
        stylesheet/transform:样式表根元素。具有以下属性:
                version:样式表XSLT版本。
                extension-element-prefixes:空格分隔的扩展元素的命名空间前缀列表。
                exclude-result-prefixes:空格分隔的不在输出中出现的命名空间前缀列表。
                id:样式表唯一id。
        template:匹配指定节点时应用的规则,此元素为顶层元素。具有以下属性:
                name:模版名称。
                match:模版匹配模式。name与match至少要定义一个。
                mode:模版模式。
                priority:模版优先级。
        text:通过样式表生成文本节点。可包含文本、实体引用,以及 #PCDATA。具有以下属性:
                disable-output-escaping:通过text元素生成的文本节点在输出时是否不进行转义,如果为yes,不进行转义,如果为no,进行转义,默认为no。
        value-of:提取选定节点的值。具有以下属性:
                select:XPath 表达式,指定从哪个节点/属性提取值。
                disable-output-escaping:通过text元素生成的文本节点在输出时是否不进行转义,如果为yes,不进行转义,如果为no,进行转义,默认为no。
        variable:声明局部或全局的变量,一旦设置了变量值就无法再修改。具有以下属性:
                name:变量的名称。
                select:变量的值。如果设置了此属性variable元素就不能包含任何内容。
        when:为 <xsl:choose> 元素规定相关动作。如果表达式计算为true,则执行指定的动作。具有以下属性:
                test:要测试的表达式。
        with-param:定义传递给模版的参数和值。具有以下属性:
                name:参数名。此属性的值应与param元素中的name相匹配。
                select:定义参数值的XPath表达式。

二、简单示例

        以w3c例子中的数据为基础,并进行了适当的修改:cdcatalog.xml
        import.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="artist" mode="import">
		Artist:
		<span>
			<xsl:attribute name="style">
				<xsl:text>color:</xsl:text>
				<xsl:value-of select="key('colors','artist')/green" />
			</xsl:attribute>
			<xsl:value-of select="." />
		</span>
		<br />
	</xsl:template>
</xsl:stylesheet>
        include.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="title" mode="include">
		Title:
		<span>
			<xsl:attribute name="style">
				<xsl:text>color:</xsl:text>
				<xsl:value-of select="key('colors','title')/blue" />
			</xsl:attribute>
			<xsl:value-of select="." />
		</span>
		<br />
	</xsl:template>
</xsl:stylesheet>
        main.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:import href="import.xsl" />
	<xsl:template match="/">
		<html>
			<body>
				<xsl:comment>xslt file</xsl:comment>
				<h2>My CD Collection</h2>
				<!--<xsl:apply-templates /> -->
				<xsl:call-template name="table" />
			</body>
		</html>
	</xsl:template>
	<xsl:strip-space elements="price year " />
	<xsl:preserve-space elements="title artist" />

	<xsl:variable name="header">
		<tr bgcolor="#9acd32">
			<th align="left">Order</th>
			<th align="left">Title</th>
			<th align="left">Artist</th>
			<th align="left">Price</th>
			<th align="left">Year</th>
		</tr>
	</xsl:variable>

	<xsl:decimal-format name="CHN" decimal-separator="." grouping-separator="," />
	<xsl:key name="colors" match="/catalog/color" use="@id" />
	<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes" />
	
	<!-- table template -->
	<xsl:template name="table">
		<table border="1">
			<xsl:copy-of select="$header" />
			<xsl:for-each select="catalog/cd">
				<xsl:sort select="title" order="descending" />
				<tr>
					<td><xsl:number value="position()" format="01" /></td>
					<td><xsl:apply-templates select="title" /></td>
					<td><xsl:value-of select="artist" /></td>
					<td>
						<xsl:call-template name="show_price">
							<xsl:with-param name="color">
								<xsl:if test="price = ''">
									<xsl:message terminate="yes">
										<xsl:text>price of title </xsl:text>
										<xsl:value-of select="title" />
										<xsl:text> not found.</xsl:text>
									</xsl:message>
								</xsl:if>
								<xsl:if test="price > 10">
									<xsl:value-of select="key('colors','price')/red" />
								</xsl:if>
								<xsl:if test="price <= 10">
									<xsl:value-of select="key('colors','price')/yellow" />
								</xsl:if>
							</xsl:with-param>
						</xsl:call-template>
					</td>
					<td>
						<xsl:choose>
							<xsl:when test="year >= 1990">
								<b><xsl:value-of select="year" /></b>
							</xsl:when>
							<xsl:when test="year < 1990 and year >= 1980 ">
								<i><xsl:value-of select="year" /></i>
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="year" />
							</xsl:otherwise>
						</xsl:choose>
					</td>
				</tr>
			</xsl:for-each>
		</table>

		<xsl:element name="div">
			<xsl:copy>
				<xsl:call-template name="list" />
			</xsl:copy>
		</xsl:element>
	</xsl:template>

	<xsl:template match="title">
		<span>
			<xsl:attribute name="style">
				<xsl:text>color:</xsl:text>
				<xsl:value-of select="key('colors','title')/red" />
			</xsl:attribute>
			<xsl:value-of select="." />
		</span>
	</xsl:template>

	<xsl:template name="show_price">
		<xsl:param name="color" />
		<span>
			<xsl:attribute name="style">
				<xsl:text>color:</xsl:text>
				<xsl:value-of select="$color" />
			</xsl:attribute>
			<xsl:value-of select="format-number(price,'#,###.00','CHN')" />
		</span>
	</xsl:template>

	<!-- list template -->
	<xsl:template name="list">
		<xsl:apply-templates />
	</xsl:template>

	<xsl:template match="color" />
	
	<xsl:template match="cd">
		<p>
			<xsl:apply-templates select="title" mode="include" />
			<xsl:apply-templates select="artist" mode="import" />
		</p>
	</xsl:template>

	<xsl:template match="title" mode="current">
		Title:
		<span>
			<xsl:attribute name="style">
				<xsl:text>color:</xsl:text>
				<xsl:value-of select="key('colors','title')/red" />
			</xsl:attribute>
			<xsl:value-of select="." />
		</span>
		<br />
	</xsl:template>

	<xsl:template match="artist" mode="import">
		<xsl:apply-imports />
	</xsl:template>

	<xsl:template match="artist" mode="current">
		Artist:
		<span>
			<xsl:attribute name="style">
				<xsl:text>color:</xsl:text>
				<xsl:value-of select="key('colors','artist')/blue" />
			</xsl:attribute>
			<xsl:value-of select="." />
		</span>
		<br />
	</xsl:template>

	<xsl:include href="include.xsl" />
</xsl:stylesheet>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值