- 浏览: 73960 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
jinbo0120:
受教了,我还一直存在疑问呢,原来是1.5开始使用的...看来我 ...
5.0for循环 -
persistC:
1、到底在哪用cascade=&q ...
hibernate.hbm.xml总结 -
duanyong:
看到xml就烦。不知道为什么。嘿嘿。
hibernate.hbm.xml总结
<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>
<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>
<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>
<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)
---------------------------
---------------------------
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.0---正则表达式
2009-06-06 16:27 974其实,正则表达式是XPATH2.0定义的,暂且放在XSLT里说 ... -
XSLT2.0----<xsl:analyze-string>
2009-06-06 16:26 924<xsl:analyze-string>是XS ... -
XSLT2.0----<xsl:variable>和<xsl:sequence>
2009-06-06 16:25 2983我们知道,<xsl:variable>可以定义变量 ... -
XSLT2.0----XPATH2.0序列
2009-06-06 16:24 978严格说来XPATH2.0和XSLT2.0并无直接联系,但是XP ... -
XSLT2.0----字符映射
2009-06-06 16:23 697XSLT2.0提供了字符映射功能。 对于特殊字符或特殊字符, ... -
XSLT2.0---多文件输出
2009-06-06 16:22 975<xsl:result-document>指 ... -
XSLT2.0---分组
2009-06-06 16:20 1238看了些关于XSLT2.0的东西,先来总结一下分组吧。 &l ... -
xsl2.0正则
2009-06-05 11:46 1055<xsl:analyze-string>是XSLT ... -
XSLT 2.0 的新特性
2009-06-05 11:44 1563XSLT 2.0 的新特性 关键 ... -
XSLT Designer快速入门指南
2008-12-15 21:07 909目录 概述 配 ... -
XSLT document()函数在IE与Firefox中的区别
2008-12-15 21:07 966XSLT 中 document() 函数的作用是用来访问扩展X ... -
了解XSLT
2008-12-15 21:06 965什么是XSLT? XSLT的英文标准名称为eXtensibl ... -
XSL中count()的使用
2008-12-15 21:05 1066XSL中用count()来取得xml中某种节点的个数 list ... -
XSL学习心得-制作图像超链接
2008-12-15 21:04 816这是我今天学习的时候遇到的另一个问题,做图像超链接要把链接地址 ... -
xslt的简单使用[xml-->html]
2008-12-15 21:03 1033XSLT命令[xml格式转换] 1.循环 <xsl:f ... -
XSL中利用xsl:for-each时给每一项添加序号
2008-12-15 21:02 1755经常用for-each来循环读取XML中的某个节点集,但常常需 ... -
第四章:XPath的语法
2008-12-15 21:00 9904.XPath的语法 我们在前 ... -
第三章:XSLT的元素语法
2008-12-15 20:59 897通过前面两章的介绍,我们已经对XSLT的基本概念和它的转换过程 ... -
第二章:XSLT的实例
2008-12-15 20:59 10212. XSLT的实例 2.1 XSLT如何转换XML 2.2 ... -
第一章:XSLT的概念
2008-12-15 20:58 8081.XSLT的概念 1.1 什么是XSLT 1.2 为什么要 ...
相关推荐
与临时表相比,Table类型变量的作用范围仅限于当前批处理或存储过程,而临时表可以在会话范围内使用。创建和使用Table类型变量时,需定义结构并插入数据。 3. **Instead of trigger**: Instead of trigger可以在...
16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...
16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...
16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 第一篇窗口与界面编程 19 16.1.5 AJAX 简单示例 16.2 ASP.NET 3.5AJAX 控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) ...
16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...
16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...
16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...