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

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 计算机科学论坛XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → 内置模板 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3453 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 内置模板 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     rgbtdkjcel 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:18
      积分:103
      门派:XML.ORG.CN
      注册:2007/4/4

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给rgbtdkjcel发送一个短消息 把rgbtdkjcel加入好友 查看rgbtdkjcel的个人资料 搜索rgbtdkjcel在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看rgbtdkjcel的博客楼主
    发贴心情 内置模板

    xsl中的内置模板是什么意思呢???


    有谁给个例题好吗???


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/9/10 18:29:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客2
    发贴心情 
    引自MSDN:
    问:当没有模板匹配待处理的节点时,会出现什么情况呢?

    XSLT 定义了几个模板,它们默认生成到每个转换中(不管您是否显式提供)。这些模板被称为 XSLT 的内置模板。可能在 XML 文档中处理的每种类型的节点(元素、属性、处理指令、注释等等)都有一个内置模板。然而,这些内置模板的优先级可能最低,因此当用户提供的模板也匹配相同节点时就从不会使用它们(请参见上一个关于冲突解决的问题)。只有当不存在匹配特定节点的其他模板时才使用它们。

    内置模板的功能可以用以下模板定义来表述:

    <!-- built-in templates -->
    <xsl:template match="*|/">
    <xsl:apply-templates select="node()"/>
    </xsl:template>
    <xsl:template match="text()|@*">
    <xsl:value-of select="."/>
    </xsl:template>
    <xsl:template match="processing-instruction()|comment()"/>

    对于根节点或元素节点,处理器会自动将模板应用到当前节点的子节点(但不会应用到其属性,因为该调用使用 child::node())。对于文本节点或属性节点,处理器会自动将节点值输出到结果树中。对于处理指令或注释,处理器不做任何处理 — 只是忽略它们。

    对于由 XSLT 提供的声明性编程模型,这个默认功能会显得十分有用。它基本上可以使您以递归方式遍历整个树,直到有一个节点匹配所提供的模板之一。当处理器遇到文本或属性节点时,它会将节点值打印到结果树的正确位置。

    为了阐述这个过程,我们试着运行以下针对任何 XML 输入文档的转换:

    <xsl:transform version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" />

    这个转换没有包含任何用户提供的模板,因此会改为使用内置模板。例如,试着针对以下文档运行它:

    <foo bar="hi">
    <bar>hello</bar>
    <bar>
    <baz>world</baz>
    </bar>
    </foo>

    在这种情况下,XSLT 处理器会输出“helloworld”。由于有了内置模板,因此它会递归遍历树并输出文本节点值。用于元素的内置模板调用 xsl:apply-templates 的方式注定从不会遇到属性节点。如果转换输出的文本总是比想要的多,原因可能是处理器递归遍历树并在无意间触及文本节点。为了避免这种情况,应该始终为文本节点重写内置模板。例如,以下代码是上一个转换的新版本,它有一个用于文本节点的新模板:

    <xsl:transform version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <!-- override built-in template to do nothing -->
    <xsl:template match="text()|@*" />
    </xsl:transform>

    通过这样修改之后,文本节点就从不会输出,除非您通过 xsl:value-of 显式使它输出。试着通过这个转换运行示例文档,您会发现什么都没有输出。另外,如果您希望处理器甚至不遍历树,可以重写用于元素的内置模板,使它什么都不做,如下所示:

    <xsl:transform version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <!-- override built-in template to do nothing -->
    <xsl:template match="*" />
    </xsl:transform>

    这样做之后,处理器就不会遍历树,自然也就不会触及文本节点。如果您通过这个转换运行示例文档,您仍然会发现它什么都没输出。如果您重写这个模板,意味着您必须对调用 xsl:apply-templates 时要处理哪些节点了如指掌。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

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

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

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    9,500.000ms