科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件应用程序开发者应了解XSLT 2.0新特性

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

XSLT 1.0中有一些特性,我发现我一年之中也只用了一两次。除开那些现在无益的特性,我主要讨论那些能够立即满足应用程序开发需求的特性。

作者:builder.com.cn 2007年3月21日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

列表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="{$name}" 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天试用到期后,你就想购买这个处理器了!

责任编辑:德东

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章