`
persistC
  • 浏览: 73496 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XSLT2.0---临时结果树

    博客分类:
  • XSLT
阅读更多
<xsl:variable>可不是新东西了,它在XSLT1.0中也有着很广泛的应用。但我看到有些文章写到了1.0和2.0的不同,但可惜的是,他们写的代码根本和他们的说法相矛盾。
---------------------------
XML文档:
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tylor</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>Still got the blues</TITLE>
<ARTIST>Gary More</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin records</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>This is US</TITLE>
<ARTIST>Gary Lee</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin records</COMPANY>
<PRICE>12.20</PRICE>
<YEAR>1990</YEAR>
</CD>
</CATALOG>
特性 3:临时树
临时树是在 XSLT 2.0 中推出的另一项新结构。与 XSLT 1.0 将 XSL 转换的中间结果和 XSL 变量表示为字符串不同,XSLT 2.0 将由 <xsl:variable>、<xsl:param> <xsl:with-param> 元素构造的中间结果和 XSL 变量存储为一组称为临时树的文档节点。
使用临时树,您可以使用 XPath 表达式来计算变量或参数的内容,并把 XSL 处理模块化。当使用模板或者从 XSL 变量或模板参数中提取数据时,这种方法提供了很大的灵活性。例如,如下所示,将目录变量设为选择 1988 年以后发行的所有 CD。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/> 
<xsl:variable name="catalog" select="//CD[number(YEAR)>=1988]"/>
  
<xsl:template match="/">
<Expensive>
<xsl:apply-templates select="$catalog[number(PRICE)>10]"/>
</Expensive>
<Cheap>
<xsl:apply-templates select="$catalog[number(PRICE) < 10]"/>
</Cheap>
</xsl:template>
  
<xsl:template match="*">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
随后可以对所选节点作进一步的分类,将价格等于或高于 10 美元的 CD 归类为高价 CD,将价格低于 10 美元的 CD 归类为廉价 CD。如果没有临时树特性,则 <xsl:apply-templates select="$catalog[number(PRICE) < 10]"/> 是无效的,并且无法访问您先前在创建 $catalog 变量时所选择的数据。
 
--------------
且不论它的XSLT有一个很低级的错误,就是select中使用了“<”(很明显作者根本没有运行过这段代码),它所描述的真的是1.0和2.0的区别吗?
更正它的错误,利用SAXON运行一下,得到结果:
<?xml version='1.0' ?>
<
Expensive>
  <CD>
    <TITLE>Still got the blues</TITLE>
    <ARTIST>Gary More</ARTIST>
    <COUNTRY>UK</COUNTRY>
    <COMPANY>Virgin records</COMPANY>
    <PRICE>10.20</PRICE>
    <YEAR>1990</YEAR>
  </CD>
  <CD>
    <TITLE>This is US</TITLE>
    <ARTIST>Gary Lee</ARTIST>
    <COUNTRY>UK</COUNTRY>
    <COMPANY>Virgin records</COMPANY>
    <PRICE>12.20</PRICE>
    <YEAR>1990</YEAR>
  </CD>
<
/Expensive>
<
Cheap>
  <CD>
    <TITLE>Hide your heart</TITLE>
    <ARTIST>Bonnie Tylor</ARTIST>
    <COUNTRY>UK</COUNTRY>
    <COMPANY>CBS Records</COMPANY>
    <PRICE>9.90</PRICE>
    <YEAR>1988</YEAR>
  </CD>
<
/Cheap>
我们试着把version="2.0" 改成version="1.0",注意处理器也要换成老的XALAN。
我们可以得到同样的结果。
这证明那位ORACLE的经理的说法是有问题了。
那么,1.0和2.0在临时结果树问题上到底是否存在区别呢?
当然是有区别了。
它们的区别在于,当变量的赋值形式为content赋值时,1.0和2.0才有这种区别。
举例来说:
XSL文档:
<?xml version='1.0'?>
<
xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:variable name="catalog">
        <cd>
            <title>the song of sping</title>
            <price>12.90</price>
            <quantity>18</quantity>
        </cd>
    </xsl:variable>
    <xsl:apply-templates select="$catalog/cd"/>
<
/xsl:template>
<
/xsl:stylesheet>
得到输出结果:
the song of sping12.9018
---------------------------
换作1.0.:
<?xml version='1.0'?>
<
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:variable name="catalog">
        <cd>
            <title>the song of sping</title>
            <price>12.90</price>
            <quantity>18</quantity>
        </cd>
    </xsl:variable>
    <xsl:apply-templates select="$catalog/cd"/>
<
/xsl:template>
<
/xsl:stylesheet>
注意processor换回老的。
Stylus Studio 2007 给出错误
---------------------------
java.lang.ClassCastException: org.apache.xpath.objects.XRTreeFrag cannot be cast to org.apache.xpath.objects.XNodeSet
URL: file:///e:/tmp/catalog1.xsl
Line:12
Col: 45
Jump to location?
---------------------------
是(Y)   否(N)  
---------------------------
分享到:
评论

相关推荐

    xslt2.0l资料1

    《XSLT 2.0 程序员参考指南》是Wrox出版社出版的一本经典书籍,专门针对XSLT 2.0版本进行了深入的解析和详细讲解。XSLT(Extensible Stylesheet Language Transformations)是一种用于转换XML(eXtensible Markup ...

    apache-camel-2.0-M3-src.tar.gz

    这个压缩包 "apache-camel-2.0-M3-src.tar.gz" 包含的是Apache Camel 2.0 Milestone 3(M3)版本的源代码,对于理解Camel的工作原理、进行定制开发或对项目进行贡献非常有帮助。 Apache Camel 的核心概念是“路由...

    apache-camel-2.0-M1-src.tar.gz

    这个"apache-camel-2.0-M1-src.tar.gz"文件是Apache Camel 2.0 Milestone 1版本的源代码包,适合开发者进行深入研究或定制开发。 Apache Camel 的核心特性包括: 1. **路由引擎**:基于EIP(Enterprise Integration...

    Beginning XSLT 2.0 From Novice to Professional

    ### XSLT 2.0从入门到精通 #### 一、XSLT与XML简介 本书《Beginning XSLT 2.0 From Novice to Professional》由Jeni Tennison编写,是关于XSLT 2.0技术的详细介绍。本书针对初学者,通过逐步深入的方式介绍了XML和...

    XSLT 2.0 and XPath 2.0.PDF

    XSLT 2.0 and XPath 2.0.PDF XSLT 2.0 and XPath 2.0.PDF

    XSLT 2.0 Programmer's Reference, Third Edition

    This book, as the title implies, is primarily a practical reference book for professional XSLT developers. It assumes no previous knowledge of the language, and many developers have used it as their ...

    XML XML Schema XSLT 2.0和XQuery开发详解源代码.rar

    XSLT 2.0是其第二个主要版本,引入了许多新特性,如支持函数库、正则表达式、格式化数字和日期等。通过XSLT,可以将XML数据转换成其他格式,如HTML、PDF或CSV,以适应不同的展示需求。 XQuery是一种查询XML数据的...

    Microsoft .NET Framework 2.0 - Web-based Client Development (70-528) Mega Guide

    《Microsoft .NET Framework 2.0 - Web-based Client Development (70-528) Mega Guide》是针对.NET Framework 2.0版本中Web客户端开发的一份全面指南,旨在帮助开发者掌握利用.NET Framework构建Web应用程序的关键...

    testng-xslt-1.1.2.zip

    这个压缩包文件“testng-xslt-1.1.2.zip”包含了这个扩展的源代码、文档以及可能的库文件,使得开发者能够方便地集成到他们的测试工作中,进行更高效的质量管理和故障排查。 TestNG是Java领域中广泛使用的自动化...

    Wrox.XSLT.2.0.and.XPath.2.0.Programmers.Reference.4th.Edition.May.2008.rar

    《XSLT 2.0 和 XPath 2.0 程序员参考》是第四版,由Wrox出版社在2008年5月出版的一本专业书籍。这本书是针对那些想要深入理解和掌握XSLT 2.0和XPath 2.0这两种强大的XML处理技术的程序员所编写的。XSLT(可扩展样式...

    Gestalt XSLT 2.0 processor-开源

    标题中的"Gestalt XSLT 2.0 processor"是一个基于Eiffel编程语言开发的开源项目,专门用于处理XSLT 2.0规范。XSLT(可扩展样式表语言转换)是一种用于XML文档转换的语言,它允许开发者将XML数据转换成其他格式,如...

    Saxon-CE:浏览器中的XSLT 2.0

    撒克逊语浏览器中的XSLT 2.0。历史笔记Saxon-CE是Saxonica首次涉足客户端(基于浏览器)XSLT支持,其中包括交互式XSLT扩展,旨在允许XSLT样式表通过修改HTML页面的内容来响应用户交互事件。 该产品是Saxon-Java代码...

    XSLT.2nd.Edition.Jul.2008.pdf

    ### XSLT 2.0 知识点详解 #### XSLT 2.0 概述 XSLT(Extensible Stylesheet Language Transformations)是一种用于转换XML文档的语言。XSLT 2.0 是XSLT 1.0 的重要更新版本,于2008年发布。XSLT 2.0 在功能上有了...

    rh-nginx112-nginx-mod-http-xslt-filter-1.12.1-2.el7.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    testng-xslt-1.1.2-master

    在"testng-xslt-1.1.2-master"这个压缩包中,我们可以找到TestNG-XSLT的源代码和相关资源,以便于我们理解和定制自己的测试报告。以下是这个项目中的关键知识点: 1. **TestNG**: TestNG是一个功能强大的Java测试...

    testng-xslt-1.1压缩包

    (1) 解压testng-xslt-1.1压缩包: 把saxon-8.7.jar(testng-xslt-1.1\lib)放到在工程目录下创建一个Lib目录; 把testng-results.xsl (testng-xslt-1.1\src\main\resources)放到test-output目录下;

    rh-nginx114-nginx-mod-http-xslt-filter-1.14.0-3.el7.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    xslt-debugger-engine-impl.jar

    xslt-debugger-engine-impl.jar

    FXSL-XSLT2:XSLT 2.0的FXSL库

    主要的新结果: 现在,几乎所有标准XPath 2.0函数(F&O)都具有高阶FXSL包装器,从而可以将它们用作高阶函数并从中创建部分应用程序。 现在,某些标准XSLT 2.0功能和说明具有高阶FXSL包装器,从而可以将它们用作高...

Global site tag (gtag.js) - Google Analytics