• 热门标签

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

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

的转换处理。
与M S X M L不同,它包括了自己的X M L解析器,X T引擎能够操作与任何S A X兼容的解析器
(S A X在第6章中已经讨论过)。一旦S A X解析器用J a v a实现,它将与X T引擎相适应。软件包也包
括了一个名为X P的快速J a v a解析器。
X T是通过命令行来使用的。在Wi n d o w s下,运行X T比在其他平台上运行要容易。下面的命
令行转换一个X M L文档,通过X S LT样式表,输出一个H T M L文档:
X T也可以接受X S LT参数,例如:
在上面的例子中, r e s u l t参数被包含在X S LT样式表中,作为一个X S LT变量。这个变量可以
被用在X S LT模板中。
X T的一个很大的好处就是它可以在除了Wi n d o w s以外的平台上运行。然而,不是所有的平
台允许运行J a v a应用程序作为独立可执行的方式,大部分的平台要求通过Java JDK所提供的J a v a
可执行应用程序来运行。例如,下面的命令行将在L i n u x下运行X T:
第9章转换XML使用317 下载
X T引擎的速度依赖于机器的处理能力,因为J a v a是一种解释语言。
3. 使用X S LT
现在看一下X S LT是如何工作的,我们将直接跳到一个简单的例子上。让我们用一个用X M L
标记的书的细节开始,将它转换成X H T M L,用于在浏览器上显示。
X H T M L是HTML 4.0的扩展版本,被设计用在X M L的应用上。更详细的信息,参考最新
的W3C推荐标准http://www.w3.org/TR/xhtml1。
这是一些用X M L标记的书的目录信息,使用的是第3章的D T D:
程序清单9 - 5
让我们看一下简单的X S LT样式表,它将用来转换源文档到要求的结果文档。结果文档将是
一个X H T M L文档,用于显示分类中书的题目:
程序清单9 - 6
318使用XML 高级编程
下载
最后,结果X H T M L文档将看上去如程序清单9 - 7所示。
根据X S LT推荐标准版本1,本例只能由X S LT引擎来执行。S A X O N和X T属于该范围。I E
5 . 0不支持—因为它不支持XPa t h和一些X S LT命令。然而,在本例中可将以上文件改为
IE 5.0支持的, 将命名空间由h t t p : / / w w w. w 3 . o rg / 1 9 9 9 / X S L / Tr a n s f o r m改为
h t t p : / / w w w. w 3 . o rg / T R / W D - x s l,并且删除<xsl:output method="html"/>语句。但要记住,即
使做了上述修改,也不能适用于本章所有的例子,所以最好在出现最新的支持I E的解析
器之后,再使用XT。
程序清单9 - 7
第9章转换XML使用319 下载
简单的结果看上去如图9 - 4所示。
图9-4
(1) 得到转换的帮助
为了更好的理解假定的例子,想象一下,你现在就是一个X S LT引擎,以它们的眼光来看这
个世界(继续,没人看你)。首先,作为一个X S LT引擎,记住,你需要的是文档命令而不是文
本本身。毕竟,你可以只处理命令而不是文本。所以,某人就不得不转换文本为要求的抽象树
命令,树林。作为一个X S LT引擎,你可能有以下两个好朋友中的一个:
• 一个D O M接口的解析器。
• 一个只给出你每个元素事件的解析器。
如果你使用的是一个D O M接口的解析器的服务,这就意味着解析器封装了整个树,通过
D O M接口来处理在树林上的任何对象。
如果你使用一个给出每个元素事件的解析器,将自己管理树林并且按自己的想法保存文档
命令。这就是使用S A X接口的J a v a方法。
所以,可爱的X S LT引擎,你可以选择是通过D O M接口的解析器来得到帮助对树林进行管理,
还是通过自己管理它。
320使用XML 高级编程
下载
内部命令可以用不同的方法实现;然而,尽管你使用关联数组或链表的链表,模型化的
命令是一棵树。DOM是W3C的推荐,指出了如何定义命令的接口。
如果你记起前面的示意图,将有三棵树。一个包含了源文档的表示,一个是结果树命令的
表示,但是第三棵树是什么?不是一个X S LT文档或是一个X M L文档吗?是的。你已经开始进入
角色了。如果是X S LT文档,转换成一种内部的树状命令并不表示将文本转换成一种分级命令。
X S LT内部命令可能是一些其他内容,为X S LT处理优化过的东西。
所以,原始的X M L文档首先被解析,然后被转换成一种抽象的树状命令,一种分级命令的
内部表示。D O M是这个内部命令的接口。X S LT文档也被解析,转换成一种内部命令。可能是一
种抽象的树状命令,但是也可能是另一种命令,被优化过用于模板的处理和模式匹配。
C a t a l o g . x m l文件:
程序清单9 - 8
可能会被表示成为如下的抽象树,用在X S L处理器中(参见图9 - 5)。
图9-5
(2) 样式表如何转换文档
如我们所讲到的, X S L是一个X M L的应用,所以样式表(如果你愿意也可以称之为转换表)
第9章转换XML使用321 下载
是一个真正的X M L文档。因为它是一个X M L文档,它可以使用X M L的声明开始,指示了X M L
解析器这个文档编码的X M L版本。
在我们的样式表中的根元素是< 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 m l n s : x s l,用来控制X S L
转换推荐的命名空间。
你可能还记得第7章,关于命名空间和模式,这个声明了X S LT的命名空间。你可以看到,
命名空间的前缀为x s l,所以根元素实际是< s t y l e s h e e t >,但是它被xsl: 进行了限制,作为它的名
字前缀。在已经声明了命名空间,任何一个以x s l :为前缀的元素都被看作X S L的词汇表。
< s t y l e s h e e t >元素包含三个模板,每一个都嵌在< t e m p l a t e >元素中,在样式表中确切的是
< x s l : t e m p l a t e >,是由于我们包括了命名空间。你会注意到,在< t e m p l a t e >元素中有一个叫m a t c h
的属性。这个属性的值是一个模式,按照X P a t h表达式的形式,用来匹配应该应用模板的树的节
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(108)