应用程序开发者应了解XSLT 2.0新特性 - XML/XSLT - 网页制作 - 站长资讯 - 一摘网站分类目录-免费收录各类优秀网站的中文网站目录
当前位置:一摘网站分类目录 > 首页 > 资讯首页 > 网页制作 > XML/XSLT > 应用程序开发者应了解XSLT 2.0新特性

应用程序开发者应了解XSLT 2.0新特性

发表时间:2011-07-06内容来源:中国目录网整理  [我要投稿]  [免费提交网站]  转发微博:

  

除非你整个假期一直在看《萤火虫》(Firefly)全集和电影《冲出宁静号》(即Serenity,根据Firefly改编),并比较家庭成员向洗劫一个小镇的Reavers怪物打开他们的礼物,否则你可能已经听说现在万维网联盟在推荐XSLT 2.0。

你想到的问题是——现在推荐XSLT 2.0是什么意思?简单来说,这表示XSLT 2.0就像刻在了石头上,那些编写XSLT的程序员现在可以使用它,写他们的XSLT处理器,而不必担心被最后一刻的改变弄得不知所措。

不过,对我来说,XSLT 2.0得到正式采用和度假这两件事激发我建立一个XSLT 2.0最佳功能的简短列表。你可以把它看作是一个“最佳”特性集,我认为它们是最常用的一些特性。XSLT 1.0中有一些特性,我发现我一年之中也只用了一两次。除开那些现在无益的特性,我主要讨论那些能够立即满足应用程序开发需求的特性。

分组

我发现,似乎每次我开始写一个XSL式样表,随后就需要用到分组信息。这种需求可能是由于某种对数据进行分类,使其更具可读性的深层次要求所引起的;或者只是由于我神经过敏!可能制定这些要求的人以前在国家狩猎委员会工作:“你可以钓一只鲑鱼和六磅其它供垂钓的鱼或一磅供垂钓的鱼和一只鲑鱼。”如果你曾经看过有关钓鱼方面的法律,你就会明白我的意思。

在XSLT 1.0中,使用分组就像在冒险,这些事情需要不断实践,像是在洞穴探险时不被Grue怪吃掉。XSLT 1.0中的首选分组方法叫做Meunchian分组,它由Oracle的Steve Meunch开发。

它的工作方式如下:编码一个xsl:key元素,指定将会用作关键字的元素或属性,以及关键字提交的元素。比较每个关键字的第一个实例提交的元素的ID和文档中的相同元素ID即可完成分组。如果两个ID匹配,则节点相同。这保证式样表中每个关键字只处理一次,并可以处理含有那个关键字值的所有元素。

下面列出一个XML样本文档和一个XSLT 1.0 Muenchian分组实例,如列表A和B

列表A——XML样本文档

<?xml version="1.0" encoding="UTF-8"?>

<world>

<country name="Canada" continent="North America">

<city>Toronto</city>

<city>Vancouver</city>

</country>

<country name="Jamaica" continent="North America">

<city>Kingston</city>

<city>Ocho Rios</city>

</country>

<country name="United States" continent="North America">

<city>Allentown</city>

<city>Mobile</city>

</country>

<country name="United Kingdom" continent="Europe">

<city>London</city>

<city>Dundee</city>

</country>

<country name="France" continent="Europe">

<city>Paris</city>

<city>Nice</city>

</country>

<country name="Japan" continent="Asia">

<city>Tokyo</city>

<city>Osaka</city>

</country>

</world>

列表B——XSLT 1.0 Muenchian分组

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:key name="keyContinent" match="//country" use="@continent"/>

<xsl:template match="/">

<xsl:element name="world">

<xsl:for-each select="//country[generate-id(.) = generate-id(key('keyContinent',@continent)[1])]">

<xsl:sort select="@continent" data-type="text" order="ascending"/>

<xsl:variable name="continent" select="@continent"/>

<xsl:apply-templates select="//country[@continent = $continent]" mode="group">

<xsl:sort select="@name" data-type="text" order="ascending"/>

</xsl:apply-templates>

</xsl:for-each>

</xsl:element>

</xsl:template>

<xsl:template match="*" mode="group">

<xsl:copy-of select="."/>

</xsl:template>

</xsl:stylesheet>

在XSLT 2.0中,分组方法有了一些改变,但应该指出的是,Meunchian分组方法依然可用。所不同的是,Meunchian分组为可选方法,因为XSLT 2.0中内置了分组功能,因此实际上不必再使用Meunchian分组。开发者可以使用xsl:for-each-group来代替它,如列表C所示。

列表C——XSLT 2.0中的分组

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">

<xsl:template match="/">

<xsl:element name="world">

<xsl:for-each-group select="//country" group-by="@continent">

<xsl:sort select="@continent" data-type="text" order="ascending"/>

<xsl:variable name="continent" select="@continent"/>

<xsl:apply-templates select="//country[@continent = $continent]" mode="group">

<xsl:sort select="@name" data-type="text" order="ascending"/>

</xsl:apply-templates>

</xsl:for-each-group>

</xsl:element>

</xsl:template>

<xsl:template match="*" mode="group">

<xsl:copy-of select="."/>

</xsl:template>

</xsl:stylesheet>

虽然这些分组方法各不相同,但它们的最终结果是一样的,如列表D所示。

列表D——分组结果

<?xml version="1.0" encoding="UTF-8"?>

<world>

<country name="Japan" continent="Asia">

<city>Tokyo</city>

<city>Osaka</city>

</country>

<country name="France" continent="Europe">

<city>Paris</city>

<city>Nice</city>

</country>

<country name="United Kingdom" continent="Europe">

<city>London</city>

<city>Dundee</city>

</country>

<country name="Canada" continent="North America">

<city>Toronto</city>

<city>Vancouver</city>

</country>

<country name="Jamaica" continent="North America">

<city>Kingston</city>

<city>Ocho Rios</city>

</country>

<country name="United States" continent="North America">

<city>Allentown</city>

<city>Mobile</city>

</country>

</world>

多文档输出

在使用XSLT 1.0时,我经常遇到式样表输出限制。我指的是文档输出问题,它一次只允许输出一个文档。这表示有必要在结果文档生成时进行处理。

以列表A中的XML文档为例,假设我们要把它分成几个XML文档,每个国家一个。过去必须用选择的语言编写一些代码建立单独的XML文档。XSLT 2.0改变了这种做法。

现在XSLT 2.0使用xsl:result-document元素,它与xsl:output元素结合生成几个输出文档。有趣的是,使用方法属性,不同的xsl:output文档可以用来生成不同的文档类型。列表E中的式样表说明了使用这种特性的一种可能方法,列表F-L中的XML文档为处理结果。

列表E——在XSLT 2.0中生成多个输出文档

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">

<xsl:output name="xml" method="xml"/>

<xsl:template match="/">

<xsl:apply-templates select="//country"/>

</xsl:template>

<xsl:template match="country">

<xsl:variable name="name" select="concat(@name,'.xml')"/>

<xsl:result-document href=http://www.chinahtml.com/0710/"" format="xml">

<xsl:copy-of select="."/>

</xsl:result-document>

</xsl:template>

</xsl:stylesheet>

列表F -- Canada.xml

<?xml version="1.0" encoding="UTF-8"?>

<country name="Canada" continent="North America">

<city>Toronto</city>

<city>Vancouver</city>

</country>

列表H -- Jamiaca.xml

<?xml version="1.0" encoding="UTF-8"?>

<country name="Jamaica" continent="North America">

<city>Kingston</city>

<city>Ocho Rios</city>

</country>

列表I -- United States.xml

<?xml version="1.0" encoding="UTF-8"?>

<country name="United States" continent="North America">

<city>Allentown</city>

<city>Mobile</city>

</country>

列表J -- United Kingdom.xml

<?xml version="1.0" encoding="UTF-8"?>

<country name="United Kingdom" continent="Europe">

<city>London</city>

<city>Dundee</city>

</country>

列表K -- France.xml

<?xml version="1.0" encoding="UTF-8"?>

<country name="France" continent="Europe">

<city>Paris</city>

<city>Nice</city>

</country>

列表 L -- Japan.xml

<?xml version="1.0" encoding="UTF-8"?>

<country name="Japan" continent="Asia">

<city>Tokyo</city>

<city>Osaka</city>

</country>

其它特性

除已经列举的特性外,我的最喜爱特性列表中还有其它一些特性。第一个是XPath 2.0支持。作为一个XML爱好者,我期待着试用这些新特性和XPath 2.0的功能。第二个特性,XQuery 1.0,可帮助其他人更易于理解XSLT。XQuery 1.0有望帮助那些对XPath“过敏”的用户使用XSLT 2.0。

应用XSLT 2.0

不幸的是,如果你对试用XSLT 2.0版本的新特性感兴趣,当前只能使用少数几个处理器。第一个为Michael Kay的Saxon处理器,如果你希望遵从万维网联盟的推荐,这个开源XSLT处理器为你提供了一个选择。另一个是Altova的XMLSpy处理器,它是我见过的速度最快的XML编辑器。它们的网站提供这个处理器的30天试用版本。唯一的问题是,30天试用到期后,你就想购买这个处理器了!

  • 站长资讯刊登此文只为传递信息,并不表示赞同或者反对作者观点。
  • 如果此内容给您造成了负面影响或者损失,本站不承担任何责任。
  • 如果内容涉及版权问题,请及时与我们取得联系。
119
最新推荐                    我也要出现在这里 | 更多
快速链接
最新快速审核
中国数字期刊网(www.shiziqikan.com)是提供论文发表、期刊合作、
www.shuziqikan.com
71读小说网是广大书友最值得收藏的网络小说阅读网,网站收录了当前最火最热的网络小
www.71du.com
大香蕉网是专业发放淘宝优惠券天猫超市优惠券的优惠券网站,每天数万种淘宝内部优惠券
www.daxiangjiao1234.com
读客吧汇聚经典原创小说,致力于打造最好最完善的免费网络小说阅读网,网站收录了当前
www.dukeba.com
凭身份证手机贷款✔极速贷款✔快速借款✔分期信用贷款✔网上手机贷款app✔身份证贷
www.maolidai.cn
ADS 广告位招租
一摘开放式网站目录
在线投稿提交网站关于我们帮助中心 广告赞助免责声明 隐私保护最新推荐友情连接意见反馈
Copyright © 2006-2011 一摘网络 版权所有  1zhai.com  All Rights Reserved
在线投稿,网站免费登录,新收录网站首页显示,所有排名全自动实时刷更新,网站推广的最佳选择就在一摘开放式网站目录
Powered by 一摘网络(1zhai.com)    快速审核|投放广告,请点击给我信息快速审核|投放广告
页面执行时间: 170.8 毫秒