新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → 小谈XSL继承(争做版主大放血) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 11352 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: 小谈XSL继承(争做版主大放血) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     hexun831012 帅哥哟,离线,有人找我吗?天秤座1983-10-12
      
      
      威望:1
      等级:研二(Pi-Calculus看得一头雾水)(版主)
      文章:800
      积分:5114
      门派:XML.ORG.CN
      注册:2006/12/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hexun831012发送一个短消息 把hexun831012加入好友 查看hexun831012的个人资料 搜索hexun831012在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hexun831012的博客楼主
    发贴心情 小谈XSL继承(争做版主大放血)

    XSL支持import和include,这使XSL实现继承成为可能,import和include从功能的角度上看区别不大,但从继承的角度上看有着本质的区别。
    在说明XSL继承之前,首先要说明XSL模板的优先级问题,稍微了解XSL的人都知道,XSL的模板是自下而上进行解析的,也就是说文档下方的模板具有较高的优先级,如果文档中的模板相互交叉,那么下方的模板将覆盖上方的模板:
    <xsl:template match="*">
      <b>
        <xsl:value-of select="." />
      </b>
    </xsl:template>
    <xsl:template match="node">
      <xsl:value-of select="." />
    </xsl:template>
    这个例子最能说明问题,node节点将被下方的模板拦截,而其他节点将交给上方的模板解析,这就说明了模板的顺序对文档来说非常重要,而import和include最大的区别就在于顺序。
    import是顶级元素,它必须放在任何模板之前,这是一个良好的特性,import导入文档的模板将放在当前文档的最上方,他们的优先级相对于当前文档较低,也就是说如果模板相互交叉,那么当前文档的模板将覆盖导入文档的模板,这就是实现了重写!!!这种方式最类似于JAVA,他在默认情况下是可重写的:
    base.xsl
    <xsl:template match="text()"/>
      <xsl:value-of select="." />
    </xsl:template>
    use.xsl
    <xsl:import href="base.xsl" />
    <xsl:template match="text()"/>
      <b>
        <xsl:value-of select="." />
      </b>
    </xsl:template>
    use.xsl的text()模板覆盖了base.xsl中的模板,也就是重写,而include和import不同,它可以放在文档的任何位置,如果放在文档的最下部,那就意味着导入文档的模板的优先级高于当前文档的模板,也就是封装!!!这种方式最类似于.NET,默认情况下不可重写:
    base.xsl
    <xsl:template match="text()"/>
      <xsl:value-of select="." />
    </xsl:template>
    use.xsl
    <xsl:template match="text()"/>
      <b>
        <xsl:value-of select="." />
      </b>
    </xsl:template>
    <xsl:include href="base.xsl" />
    use.xsl的text()模板无法覆盖了base.xsl中的模板,也就是封装,如果想实现部分重写,有两种方式,第一,是手动分配模板的优先级,当然这种方式比较繁琐,还有一种方法就是把include放在文档中部,把不需要重写的放在上面,把需要重写的放在下面,当然这种情况比较少。
    我所推荐的是使用import,从逻辑上说,可重写的模式对XSL来说比较合理,对于开发人员来说,这种模式既继承了基类的模板,又不用关心基类的细节,如果文档多次继承,那么文档之间有着良好的层次结构,这就为XSL的模块化,层次化提供了可能

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/23 12:40:00
     
     GoogleAdSense天秤座1983-10-12
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 17:05:17

    本主题贴数8,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  小谈XSL继承(争做版主大放血)(2110字) - hexun831012,2007年7月23日
        回复:  呵呵,其实,我的意思不是“专业”和“业余”,我是想说“专职”来着。admin老大,发过好几条回..(156字) - gogy,2007年7月26日
            回复:  [quote][b]以下是引用[i]gogy在2007-7-26 10:44:00[/i]的发言:..(334字) - admin,2007年7月27日
        回复:  抱歉,抱歉(10字) - hexun831012,2007年7月25日
        回复:  生气了不是?我可没有攻击你的意思,可是你却搞人身攻击,这不好吧?》》》》》》我的个人观点就是..(278字) - gogy,2007年7月25日
        回复:  楼上的说话要负责任,连XSL的解析顺序都不知道,还自称专业,真是自视甚高,好好看看W3C的文档和X..(208字) - hexun831012,2007年7月25日
        回复:  才看明白你这篇文章的意思。我的个人观点就是,这篇文章除了“import是顶级元素,它必须放在任何模..(1263字) - gogy,2007年7月25日
        回复:  申请精华,争做版主(18字) - hexun831012,2007年7月23日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    50.781ms