• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:24来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

<xsl:template match=”ATOM”>
<xsl:apply-templates
select=”MELTING_POINT”/>
</xsl:template>
<xsl:template match=”MELTING_POINT”>
<xsl:copy-of select=”..”>
<xsl:apply-templates select=”*|@*|pi()|text()”/>
</xsl:copy-of>
</xsl:template>
<xsl:template match=”* | @* | pi() | text()”>
<xsl:copy>
<xsl:apply-templates select=”* | @* | pi() | text()”/>
XML 实用大全
第 505 页
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是一个从源符号集到同一个符号集的XSL 转换的例子。不像本章中的大多数例子那样,此例不转换成结构整洁的HTML。
XML 实用大全
第 506 页
14.11 使用xsl:number 为节点计数
xsl:number 在输出文档中插入格式化整数。由expr 特性计算出来的数值,通过四舍五入成最接近的整数,然后根据format
特性值,对此整数进行格式化,从而获得整数值。为这两个特性提供了恰当的缺省值。例如,考查清单14-17 中的ATOM 元
素的样式单。
清单14-17:为原子计数的XSL 样式单
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
<xsl:template match="PERIODIC_TABLE">
<html>
<head><title>The Elements</title></head>
<body>
<table>
<xsl:apply-templates select="ATOM"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="ATOM">
<tr>
<td><xsl:number expr="position()"/></td>
<td><xsl:value-of select="NAME"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
XML 实用大全
第 507 页
当此样式单应用于清单14-1 时,输出类似如下显示:
<html><head><title>The
Elements</title></head><body><table><tr><td>l</td><td>Hydrogen<
/td></tr>
<tr><td>2</td><td>Helium</td></tr>
</table></body></html>
由于氢是其父元素的第一个ATOM 元素,所以其号码为1。由于氦是其父元素的第二个ATOM 元素,所以其号码为2。(这些
号码对应于氢和氦的原子序数,这种对应关系是清单14-1 的副产品,而清单14-1 正是以原子序数的顺序进行排列的。)
14.11.1 缺省数值
如果使用expr 特性来计算编号,那么这就是所需要的值。但是,如果省略expr 特性,那么源树形结构中的当前节点位置就
作为编号来使用。但是,可使用下面三个特性来调整此缺省值:
• level
• count
• from
这三个特性是从以前的不支持较为复杂的表达式XSL 草案中延续下来的。如果它们完全使你混淆,那么我建议不要
去考虑它们,使用expr 来代替。
14.11.1.1 level 特性
按缺省行为,当不存在expr 特性时,xsl:number 可对源节点的同属节点加以计数。例如,如果对ATOMIC_NUMBER 元素而不
是ATOM 元素加以编号,那么由于一个ATOM 元素绝不会有多个ATOMIC_NUMBER 子元素,所以任何一个编号都不会大于1。尽
管文档包含多个ATOMIC_NUMBER 元素,但它们不是同属的。
将xsl:number 的level 特性设置成any,可对与文档中当前节点同类的所有元素加以计数。此情况不仅包括与当前规则相
匹配的元素,还包括类型与要求相一致的所有元素。例如,即使只选择气体的原子序数,固体和液体也仍然计数在内(即便
固体和液体没有输出也是如此)。看看下面的这些规则:
<xsl:template match="ATOM">
<xsl:apply-templates select="NAME"/>
</xsl:template>
<xsl:template match="NAME">
XML 实用大全
第 508 页
<td><xsl:number level="any"/></td>
<td><xsl:value-of select="."/></td>
</xsl:template>
由于level 设置成any,上面的规则对每个新的NAME 元素产生的输出不是从1 开始,其输出结果如下:
<td>l</td><td>Hydrogen</td>
<td>2</td><td>Helium</td>
如果删除level 特性或设置成缺省的single 值,那么输出结果如下:
<td>l</td><td>Hydrogen</td>
<td>l</td><td>Helium</td>
另一个不大有用的方法将xsl:number 的level 特性设置成multi,以便对当前节点的同属及其祖先(但不是当前节点同属
的子节点)加以计数。
14.11.1.2 count 特性
按缺省行为,当没有expr 特性时,只对与当前节点元素同类的元素加以计数。但可以将xsl-number 的count 特性设置成选
择表达式,从而指定对什么元素加以计数。例如,下面的规则对ATOM 的所有子元素进行编号:
<xsl:template match="ATOM/*">
<td><xsl:number count="*"/></td>
<td><xsl:value-of select="."/></td>
</xsl:template>
应用此规则获得的输出结果如下:
<td>l</td><td>Helium</td>
<td>2</td><td>He</td>
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML实用大全(143)