• 热门标签

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

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

据内容节点作为孩子。
• 第二,我们为X S LT文档创建了一个命令。这个可能也是一个树林,但是它可能是任何一
种命令,而且为了模板处理和模式匹配作了优化。
• 然后,每一次我们遇到一个< x s l : a p p l y - t e m p l a t e s >元素,形成一个节点列表,使用这个列表
继续处理。如果< x s l : a p p l y - t e m p l a t e s >元素包含一个s e l e c t属性,从指定的X P a t h查询中获得
324使用XML 高级编程
下载
节点列表,另外这个节点列表将包括所有的子节点。
• 每一次遇到一个< x s l : v a l u e - o f >命令,我们从源树中提取出一个值,根据在X P a t h表达式中
的s e l e c t属性。
• 转换不限于一对一的翻译,它也允许其他新的信息内容,一对多的元素翻译,元素的增加,
元素的删除。
9.3 XSLT 样式表命令
好了,我们已经看过了第一个例子,它是通过X S LT文档来转换一个X M L文档变成一种新的
命令。现在,应该全面地看一下X S LT的命令是怎样的。
从第一个例子中我们已经学了很多;不仅看到对于一个需要转换的文档, X S LT处理器是如何
贯穿全部的—我们看到生成其他元素这一点非常有用—也使用了X S LT元素的四个关键字:
• <xsl:stylesheet>
• <xsl:template>
• <xsl:apply-templates>
• <xsl:value-of>
在开始的第一个例子中,我们使用了X M L的声明,因为样式表是一个X M L文档。记住x s l :
作为限定前缀应用于属于X S LT命名空间部分的元素, < s t y l e s h e e t >元素是一个包含其他样式表元
素的文档元素,这就是命名空间被声明的地方。在这个元素中
我们有三个< t e m p l a t e >元素,它被用于指定一个元素或其他节点
中,对被用于指明m a t c h的属性应如何转换。这个可以被看作大
部分转换工作的主要的构建块。< x s l : a p p l y - t e m p l a t e s >元素被用
于告诉处理器去处理当前元素的所有子元素,如果没有指出
s e l e c t属性时。否则,只有匹配符合选择标准的节点被处理。最
后,x s l : v a l u e - o f元素被用于输出一个元素内容。
这个说明在X S LT规范中定义的两种元素。除了根元素之外,
是模板和指令。很明显, < x s l : t e m p l a t e >是一个模板,因为在抽
象树状命令中,它将显示在根元素的下面。然而< x s l : a p p l y -
t e m p l a t e s >和< x s l : v a l u e - o f >是指令,作为< t e m p l a t e >元素的孩子
显示出来。记住一个X S LT文档是一个X M L文档,因为如此就可
以被转化为一个树状命令。
图9 - 9显示了顶级元素,< x s l : s t y l e s h e e t >元素的孩子:
这个说明了为什么< x s l : s t y l e s h e e t >元素总是一个X S LT样式
表的根元素。在这个元素的下面,我们能够有很多的顶级元素。所以, X S LT处理器工作使用的
抽象命令就是像这样的,有一个根和很多的顶级元素。让我们浏览其中一些。
9.3.1 创建模板
在任何一个X S LT样式表中的关键命令是< t e m p l a t e >元素,它使用一个m a t c h属性,它的值是
第9章转换XML使用325 下载
图9-9
一个模式—或X P a t h表达式—表示应该使用哪一个节点的模板。更明确地说,任何X P a t h表
达式返回一个节点列表,与m a t c h属性值相匹配的节点候选。然而,容易记忆的是模式是一个
X P a t h表达式,它指出对于一个节点应该应用哪一个模板。在模板里面我们可以包含元素和元素
的内容。
9.3.2 处理空白
为了帮助我们使用空白, X S L指供了两种命令,被用作顶级元素:
• xsl:strip-space 用来除掉被选中的节点中的空白节点。
• xsl:preserve-space 保持内容中的任何空白。
1. xsl:strip-space。
当元素的名字包含一个e l e m e n t s属性时,< x s l : s t r i p - s p a c e >元素从树中删除由空白组成的文本
节点。例如,下面的< x s l : s t r i p - s p a c e >元素将删除任何< B O O K L I S T >或< I T E M >元素中的仅由空
白组成的文本节点。
所以,上面的元素告诉X S L引擎,如果元素< B O O K L I S T >和< I T E M >由空白组成,它们的文
本节点应该从树(然而元素节点被保留)中被删除。
2. xsl:preserve-space
同样,如果我们想保留某种元素内容的的空白,那么包含< x s l : p r e s e r v e - s p a c e >元素。再一次
指出,e l e m e n t s属性用于指示所有所想保留空白的元素列表。下面的例子,对于< C ATA L O G >和
< P R I C E >元素空白被保留。
9.3.3 输出格式
<xsl:output />元素能够被用于指示一个结果树(尽管并不要求一个X S L处理器实现这个功能)
的输出格式。
再一次强调,这是一个顶级元素,在正常情况下,应立即跟在< x s l : s t y l e s h e e t >元素后面。
这不是一个强制性的元素,在很多情况下, X S L引擎可能对于H T M L在某些条件下有缺省设
置:
• 结果树的根节点应该有一个子节点。
• 根的第一个子节点应该是一个h t m l元素。
• 任何在第一个子节点前的节点应该只包含空白字符。
也可以将结果树设成不同的格式,如x m l、h t m l或t e x t。< x s l : o u t p u t >元素的一个有趣的属性
是e n c o d i n g属性。这个在后面可以允许我们将某种编码转换成另一种X S LT引擎所支持的一种目
标编码。例如,一个A S C I I编码的X M L文档可以被转换成统一码编码文档。所以,为了转换一
个X M L文档到一个新的使用不同编码的X M L文档,应该在< x s l : s t y l e s h e e t >元素后面立即包括
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(110)