XSLT专业站 - 提供xslt和xml相关的资料书籍和教程  
XSLT专业站 - 提供xslt和xml相关的资料书籍和教程
网站地图  收藏本站
首页 | 热门文章 | 精彩实例 | 经典教程 | XSLT语法详解 | 资料下载 | 休闲天地 | 交流论坛
  当前位置:首页>经典教程>文章内容
XSLT的处理模型(5)
来源:XSLT.org.cn 作者:XSLT专业站 发布时间:2007-08-04  
XSLT的处理模型(5)


   解释到这里敏锐的读者都会发现两个问题:

      1)     第一个XSLT文档没有<xsl:apply-templates />,为什么处理器能执行?
      2)     第二个例子的<xsl:template match="/">不也是一个模板规则吗,它同样没有上一层的<xsl:apply-templates />来调用,为什么可以被执行?

   这问题的答案其实非常简单,大家知道,C语言的程序中,main函数是整个程序的入口,程序的执行总是从这里开始,在XSLT中可以当然也必须做类似的规定,XSLT规范规定XSLT处理器总是从一个模板最基本的模板开始做全部的处理,这个模板就是:

    <xsl:template match="/">

    XSLT处理器加载XML文档并将它处理成源树,接着XSLT处理器读入XSLT文档,并在文档中找上述的模板,如果找到则开始处理,如果没有找到,XSLT调用默认得模板

    <xsl:template match="/">
        <xsl:apply-templates>
    </xsl:template>

    开始整个处理过程。由此可见和C语言比较,XSLT唯一不同的地方在于它的"main函数"可以不声明,这时它使用默认的"main函数"。

   1.4     上下文

    至此关于处理模型的讨论还没有结束,我们再看一下什么是上下文(context)。前面提到<xsl:for-each select="name">的语义是对所有源树中的name元素节点应用for-each元素定义的内容,这样的说法其实是不够严格的,我们看如下的例子:

  <people>
      <name>Tony</name>
      <son>
         <name>Tony's son</name>
      </son>
  </people>

    在这个XML文档中,我们如果想得到所有的people元素的孩子name元素,而不想得到整个文档中的name元素比如son元素的name孩子节点,这时应该如何处理?

    一个适合的模板规则是:

    <xsl:template match ="people ">
         <xsl:for-each select="name"/>
    </xsl:template >

    在该规则中,select选择得到的name节点是people元素节点的孩子节点name,而不是它的孙子节点name,虽然它们具有相同的名称。也就是说for-each指定只选择tony而不选择tony's son。再看另外一个模板规则:

    <xsl:template match ="son">
        <xsl:for-each select="name"/>
   </xsl:template >

    这个模板规则除了match属性以外和上一个模板规则没有任何的不同,但是这个模板规则内的for-each却能够得到son的name子元素。这里的区别在于当前一个模板被实例化的时候,处理器处在people元素这一层,而后一个模板规则实例化的时候处理器已经向下"走"了一层,它当前的位置在son元素一层。由此可见处理器的当前位置对于节点的选择来说是何等地重要,为了更好的理解当前位置的概念,我们举一个生活中的例子,便于大家的理解。



标题: XSLT的处理模型(5)
关键字:处理模型 模板 元素 XSLT 规则 节点 处理器
上一篇:XSLT的处理模型(4)   下一篇:XSLT的处理模型(6)
  经典教程热点文章
·XSLT的处理模型(1)
·XSL基础教程(一)
·XSLT的处理模型(2)
·XSLT的处理模型(3)
·XSLT的处理模型(4)
·XSLT的处理模型(6)
·XSLT的处理模型(7)
·XSLT的处理模型(8)
·XSLT的处理模型(9)
·XSLT的处理模型(10)
·XSL基础教程(二)
·XSL基础教程(三)
  经典教程相关文章
·XSLT的处理模型(4)
·XSLT的处理模型(6)
·XSLT的处理模型(3)
·XSLT的处理模型(7)
·XSLT的处理模型(2)
·XSLT的处理模型(8)
·XSLT的处理模型(1)
·XSLT的处理模型(9)
·XSLT的处理模型(10)
·XSL基础教程(一)
·XSL基础教程(二)
·XSL基础教程(三)
Copyright© 2007 xslt.org.cn All rights reserved.