• 热门标签

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

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

规则将无效。例如,按照如下方式,通过匹配根元素,并且既不应用模板,也不使用xsl:for-each 来处理子元素,就可以
阻止所有的处理过程:
<xsl:template match="/">
</xsl:template>
14.8.2 文本节点的缺省规则
细心的读者或许已经注意到,有几个例子似乎已输出了有些元素的内容,但实际上没有获得输出的元素值!这些内容是由
XSL 用于以元素内容出现的文本节点的缺省规则提供的。此规则如下:
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
这一规则匹配所有的文本节点(match="text()"),并输出文本节点(<xsl:value-of select="."/>)的值。换言之,此规
则将文本从输入复制到输出。
XML 实用大全
第 495 页
本规则确保最少输出一个元素的文本,即使没有任何规则明确地与此文本匹配。对于特定的元素(从中可或多或少获得元素
的文本内容),另一个规则可以覆盖此规则。
14.8.3 两个缺省规则的含义
这两个缺省的规则结合在一起,意味着把只有xsl:stylesheet 元素而不包括任何子元素的空样式单(如清单14-14)应用
于XML 文档时,将把输入元素中所有的#PCDATA 复制到输出。但是,这种方法不产生任何标记。可是这些规则的优先级很低。
因此,任何其他匹配都优先于这两个规则。
清单14-14:空的XML 样式单
<?xml version=“1.0”?>
<xsl:stylesheet
xmlns:xsl=“http://www.w3.org/XSL/Transform/1.0”>
</xsl:stylesheet>
在Internet Explorer 5.0 中,对XSL 产生混淆的最常见的根源之一是,没有提供任何缺省规则。要确保明确地匹
配准备输出其内容(包括其后代)的任何节点。
XML 实用大全
第 496 页
14.9 决定输出要包含的内容
在未读取输入文档时,推迟决定输出何种标记往往是必要的。例如,或许想将FILENAME 元素的内容改为A 元素的HREF 特性,
或者根据特性的值,将输入文档中的某个元素类型用输出文档中的几个不同元素类型代替。这可以通过使用xsl:element、
xsl:attribute、xsl:pi、xsl:comment 和xsl:text 来实现。在这些元素的内容中使用XSL 指令,并在这些元素的特性值中
使用特性值模板,就能改变它们的输出内容。
14.9.1 使用特性值模板
特性值模板将数据从输入中的元素内容复制到样式单中的特性值中。从那里,就可将其写入输出中。例如,假定根据要利用
下面的基于特性的形式将周期表转换成空的ATOM 元素:
<ATOM NAME=”Vanadium”
ATOMIC_WEIGHT=”50.9415”
ATOMIC_NUMBER=”23”
OXIDATION_STATES=”5, 4, 3, 2”
BOILING_POINT=”3650K”
MELTING_POINT=”2163K”
SYMBOL=”V”
DENSITY=”6.11 grams/cubic centimeter”
/>
为此,需要提取输入文档中元素的内容,并将这些内容放在输出文档的特性值中。首先,要完成下列内容:
<xsl:template match=”ATOM”>
<ATOM NAME=”<xsl:value-of select=’NAME’/>”
ATOMIC_WEIGHT=”<xsl:value-of select=’ATOMIC_WEIGHT’/>”
ATOMIC_NUMBER=”<xsl:value-of select=’ATOMIC_NUMBER’/>”
/>
</xsl:template>是畸形的XML。在特性值内部不能使用<字符。而且,要编写在大多数一般情况下都能解析此句的软件,是
极其困难的。
取而代之的是,在特性值内部,以放在花括号{}中的数据来代替xsl:value-of 元素。上面的正确编写方式如下:
<xsl:template match=”ATOM”>
XML 实用大全
第 497 页
<ATOM NAME=”{NAME}/>”
ATOMIC_WEIGHT=”{ATOMIC_WEIGHT}/>”
ATOMIC_NUMBER=”{ATOMIC_NUMBER}/>”
/>
</xsl:template>
在输出文档中,{NAME}由当前节点的NAME 子元素值所代替。{ATOMIC_WEIGHT}由当前节点的ATOMIC_WEIGHT 子元素值所代替。
{ATOMIC_NUMBER}由当前节点的ATOMIC_NUMBER 子元素值所代替,等等。
特性值模板的模式比只是一个元素名要复杂。实际上,在特性值模板中,可使用前面讨论过的任何字符串表达式。例如,下
面的模板规则以清单14-1 中使用的形式来选择DENSITY 元素。
<xsl:template match=”DENSITY”>
<BULK_PROPERTY
NAME=”DENSITY”
ATOM=”{../NAME}”
VALUE=”{.}”
UNITS=”{@UNITS}”
/>
</xsl:template>
上面的模板规则将特性值模板转换成类似于如下所示的BULK_PROPERTY 元素:
< BULK_PROPERTY NAME=”DENSITY” ATOM=”Helium” VALUE=”
0.1785
“ UNITS=”grams/cubic centimeter”/>
特性值并不局限于在一个特性值模板中使用。可以将特性值模板与文字数据或其他特性值模板组合起来使用。例如,下面的
模板规则匹配ATOM 元素,并且将元素名以H.html、He.html 等格式设置成链接文件,来代替这些元素。此文件名来源于特
性值模板{SYMBOL},而文字数据提供句号和扩展名。
<xsl:template match=”ATOM”>
<A HREF=”{SYMBOL}.html”>
XML 实用大全
第 498 页
<xsl:value-of select=”NAME”/>
</A>
</xsl:template>
在特性值中,可以包含多个特性值模板。例如,下面的模板规则将密度单位作为VALUE 特性的一部分,而不是使密度单位成
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML实用大全(140)