好好学习,天天向上

--每天都有好心情
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

xslt学习基础知识(一)

Posted on 2007-04-24 18:28  凤麟  阅读(437)  评论(0)    收藏  举报
1、xpath树形模型认可7种不同类型的xml置标:分别由一种节点类型表示。根,元素,属性,命名空间,处理指令,注释,文本。
2、通常情况下,尽管谓词(带有方括号的表达式部分)中的当前节点不同于上下文节点(这时唯一的例外),用户混淆这2个术语也不会由什么问题,可通过下列标准测试,查看当前节点与上下文节点是否相同:count(,|current())=2
3、xpath认可以下4种基本数据类型:节点集,布尔集,数字,字符串。
4、xslt中的变量并非真的可变,更像是我们在代数中遇到的那么变量。在运行时内,非但不能改变它们的值,相反还要给它们赋值。
   参数的功能甚至比变量更强大,因为尽管在技术上我们不改变参数值,但通过用户提供的表单值或其他的一些已定义的实施进程,在运行时提供一个参数值,可以模拟改变参数值的行为。
<xsl:variable>变量的一个显著特征就是它可以导致混乱,挫折,而且有时会使没有经验的人感到有一点恐慌,因为运行时它的值不能被改动。它的值是静态的,甚至不能由另外一个应用程序传递(这时xsl:param元素的作用)
5、尽管可以将变量包括在样式表中的任意位置(只要不在某个模版中),不过通常的惯例是在样式表的最高层或者是在使用该变量的模版或模版组之前包括这个变量。
6、xsl:param元素类似于xsl:variable元素,具有和xsl:variable相同的属性。不过,xsl:param元素可以从用户处获得一个输入值。这意味着不仅可以通过该参数的select属性或在模版主题中开发模版指令来创建数值,还可以通过另外一个名为xsl:with-param的元素创建数值,该数值随后可在xsl:apply-templates和xsl:call-template元素内使用。在运行时可以确定一个值,但是如何确定取决于处理机的运行环境以及处理机本身。这对于希望能够通过表单提供数值的Web开发人员是一个好主意,因为如今的许多脚本语言都能够将表单域
   解释为参数,参数值也可以通过命令行接口提供,或通过环境变量传递。
   注意:xsl:with-param元素必须是xsl:apply-templates或xsl:call-templates元素的直接子元素。如果把它放在其他任何位置,xslt处理机都会报错。
7、xslt依赖与静态的数值分配,从而消除了一些使用变量的神秘感。包括xslt在内的所有语言环境中,正确管理递归的关键是确保有一个中止条件。
8、xsl:for-each使用该元素的最佳时机是知道某些节点集能起作用,并且已经知道以某种方式创建了它们的时候。提供类似功能的xsl:apply-templates元素通常是要对将要处理的节点不了解时使用。
9、xsl:for-each一个重要用户就是创建商务处理,如可以用来在线生成货单的表单等。
10、分组与索引:分组的关键是一个名为xsl:Key的元素。此元素为引用节点提供了一个及其简化的操作,即使用户不再此分组也是如此。但他及其有名的是作为一种分组办法,帮助同名元素或其他节点放入共同的集合中。分组一个明显用户是:在从数据库引入数据,或者是将xml文档转换成xml文件时,数据可以流入
数据库,再流回来并流入另一个转换。
Xslt语言的设计目标:它是一种转换语言,而不是查询语言。xslt也不是作为一种理想的分组工具来设计的。一个具体的分组局限性就是不能再关键字中使用变量引用。这一局限性将使得难以进行可对xml文档使用不同的未知元素的通用转换。
11、测试两个节点是否相同。"|"操作符测量它两侧的节点,并检查它们是否相同。用户可以再不同的情况下使用这个功能测试2个节点是否相同,操作语言如下:count(x|y)=1
12、current函数用法:返回当前节点。但应牢记以下几点:
 (1)全局变量的当前节点是文档的根结点。
 (2)最重要的规则:在当前上下文节点不变的情况下,xsl:apply-templates或xsl:for-each处理过程中遇到的每一个节点实例都会成为当前节点。要考虑这样一个事实:尽管有时当前节点与上下文节点其实是同一个节点,但必须始终存在一个上下文节点和一个当前节点。在这些指令中的任何指令完成其工作时,当前节点都会发生变化,不管该指令工作之前的那个当前节点到底是那一个。
 (3)鉴于使用表达式的一个主要原因就是改变上下文节点,表达式并不对当前节点产生任何影响,因此即使多如牛毛的表达式范围以内,当前节点也将保持不变。如果这和开始时的说法有点矛盾。请记住这只是按顺序排列支配当前节点的指令集,而不是指令集中的表达式。
 (4)xsl:call-template或xsl:apply-import元素都不改变当前节点。
13、关键字:xsl:key和key()。注意:要想实际使用元素,就需要同时使用key()函数。
14、xslt转换时去掉所选择的字符串的空格。normalize-space函数