曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
<xsl:apply-templates>
<xsl:sort select="ATOMIC_NUMBER"/>
</xsl:apply-templates>
XML 实用大全
第 512 页
</table>
</body>
</html>
</xsl:template>
<xsl:template match="ATOM">
<tr>
<td><xsl:apply-templates select="NAME"/></td>
<td><xsl:apply-templates select="ATOMIC_NUMBER"/></td>
<td><xsl:apply-templates select="ATOMIC_WEIGHT"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
图14-5 显示的结果表明了以字母顺序排序的局限。原子序数为1 的氢是第一个元素。但是第二个元素不是原子序数为2 的
氦,而是原子数为10 的氖。尽管按数字10 排在9 之后,但按照字母,10 却在2 之前。
图14-5 按原子序数的字母顺序排序的原子
XML 实用大全
第 513 页
但是,通过指导可选的data-type 特性设置为number,即可调整排列顺序。例如,
<xsl:sort data-type="number" select="ATOMIC_NUMBER"/>
图14-6 显示了正确排序的元素。
图14-6 以数字顺序对原子序数进行排序的原子
按照下面的方法,将order 特性设置为descending,即可使排列顺序从缺省的升序改为降序:
<xsl:sort order="descending"
sort="number"
select="ATOMIC_NUMBER"/>
这样就使元素从最大到最小的原子序数进行排列,所以氢现在处于表的最后。
以字母顺序进行的排序自然依赖于字母表。lang 特性可设置关键字的语言。此特性的值应是一种ISO 639 语言码,如对于
英语为en。
这些值与xml:lang 特性支持的值相同,这在第10 章“DTD 中特性声明”中已经讨论过。
最后,可将case-order 特性设置为upper-first 或lower-first 两个值当中的一个,以指定大写字母是排在小写字母之前,
还是反过来。缺省状况依赖于语言。
XML 实用大全
第 514 页
14.13 CDATA 和<符
标准的XSL 无法在输出文档中插入原始的、未转义的不是标记一部分的 < 符号。原始的小于号使输出文档结构混乱,这是
XSL 不允许的。作为一种替代方法,如果使用如<的字符引用或实体引用<来插入<符号,格式化程序将插入<或可
能为<。
当将JavaScript 嵌入到页面中时,由于JavaScript 使用 < 符号表示数字的小于,而不是表示标记的开始处,这时,这种
问题就变得重要。
但是,还是可在输出文档中插入原始的、未转义的 > 和 >= 符号的。因此,如果输出文档需要包含数字比较关系的
JavaScript,那么可颠倒操作数的顺序,将小于比较关系重写成大于等于比较关系。同样,可将小于等于比较关系重写成大
于比较关系。例如,下面为几行JavaScript 代码,在我的很多Web 网页中使用了这些代码:
if (location.host.tolowercase().indexof("sunsite") < 0) {
location.href="http://metalab.unc.edu/xml/";
}
由于在前两行中使用了小于号,致使这些行结构混乱。但这些语句与下面的这些语句是完全等效的:
if (0 > location.host.tolowercase().indexof("sunsite")) {
location.href="http://metalab.unc.edu/xml/";
}
如果将布尔操作符组合起来进行多重测试,那么可能需要将逻辑“和”改为逻辑“或”。例如,下面两行JavaScript 非常
有效地用来测试页面的位置既不在metalab 处,也不在sunsite 处:
if (location.host.toLowerCase().indexOf("metalab") < 0
&& location.host.tolowercase().indexof("sunsite") < 0) {
location.href="http://metalab.unc.edu/xml/";
}
由于在前两行中使用了小于号,致使这些语句结构混乱。但下面的这些行也是用来测试页面是在metalab 上还是在sunsite
上,与上面的代码行是完全等效的:
if (0 > location.host.toLowerCase().indexOf("metalab")
|| 0 > location.host.tolowercase().indexof("sunsite")) {
location.href="http://metalab.unc.edu/xml/";
}
XML 实用大全
第 515 页
也可以将这种令人不快的JavaScript 放在独立的文档中,并从SCRIPT 元素的SRC 特性中与之进行链接。但是,这
在Internet Explorer 4 和Netscape Navigator 3 之前的版本中是不可靠的。
出于简化的目的,在输出文档中CDATA 部分是不允许的。CDATA 部分总是可以用带有Unicode 转义(escape)的等价字符集
合来代替出问题的 < 号和 & 号。CDATA 完全是为人类手工编写XML 文件提供的便利。计算机程序,如XSL 格式化程序并不
需要CDATA 部分。
为向输出文档中插入CDATA 部分,包括在Internet Explorer 5.0 中的XSL 格式化程序的确支持非标准的xsl:cdata
元素。但是,这一特点未必会加入到标准的XSL 中,甚至会从将来的Internet Explorer 版本中将此功能删除。
XML 实用大全
第 516 页
14.14 方式
有时,要在输出文档中多次地包括源文档中的相同内容。要达到此目的是很容易的:只需多次地应用模板,在每个要使数据
出现的地方应用一次。但是,假如要在不同的地方对数据进行不同的格式化,那怎么办呢?这是个比较棘手的问题。
例如,若要使处理周期表的输出文档形成与100 个更详细描述各原子信息的链接。在此情况下,输出文档的开始很可能如下:
<UL>
<LI><A HREF=”#Ac”>Actinium</A></LI>
<LI><A HRFF=”#Al”>Aluminum</A></LI>
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML实用大全(145)