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

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → 多个 XML 节点循环共用一个 XSL 模板时传入的参数问题 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4401 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 多个 XML 节点循环共用一个 XSL 模板时传入的参数问题 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     Triumph1218 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:62
      门派:XML.ORG.CN
      注册:2005/9/1

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Triumph1218发送一个短消息 把Triumph1218加入好友 查看Triumph1218的个人资料 搜索Triumph1218在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Triumph1218的博客楼主
    发贴心情 多个 XML 节点循环共用一个 XSL 模板时传入的参数问题

    XML 内容如下:
    ------------------------------------------------------
    <list1>
        <item id="1">ItemText1</item>
        <item id="2">ItemText2</item>
        <item id="3">ItemText3</item>
        ...
    </list1>
    <list2>
        <item id="1" attrib="attribvalue1">ItemText1</item>
        <item id="2" attrib="attribvalue2">ItemText2</item>
        <item id="3" attrib="attribvalue3">ItemText3</item>
        ...
    </list2>
    <list3>
        <item>ItemText1</item>
        <item>ItemText2</item>
        <item>ItemText3</item>
        ...
    </list3>
    ------------------------------------------------------

    对于 List1 ,要求输出:
    <div><input type="checkbox" name="list1" value="1"/><label>ItemText1</label></div>
    <div><input type="checkbox" name="list1" value="2"/><label>ItemText2</label></div>
    <div><input type="checkbox" name="list1" value="3"/><label>ItemText3</label></div>
    ....

    对于 List2,要求输出:
    <div><input type="checkbox" name="list2" value="1"/><label>attribvalue1 - ItemText1</label></div>
    <div><input type="checkbox" name="list2" value="2"/><label>attribvalue2 - ItemText2</label></div>
    <div><input type="checkbox" name="list2" value="3"/><label>attribvalue3 - ItemText3</label></div>
    ....

    对于 List3,要求输出:
    <div><input type="checkbox" name="list3" value="ItemText1"/><label>ItemText1</label></div>
    <div><input type="checkbox" name="list3" value="ItemText2"/><label>ItemText2</label></div>
    <div><input type="checkbox" name="list3" value="ItemText3"/><label>ItemText3</label></div>
    ....
    -----------------------------------------------

    由于都是循环输出,而且输出格式大体相同(就是每一组的 checkbox 的 value值和 label 的内容不同),所以用一个模板实现,如下:
        <xsl:template name="outlist">
            <xsl:param name="value"/>
            <xsl:param name="text"/>
            
            <xsl:for-each select="./*">
                <div>
                    <input type="checkbox" name=".." value="{$value}"/>
                    <label><xsl:value-of select="$text"/></label>
                </div>
            </xsl:for-each>
        </xsl:template>

    想请教大家,调用此模板时,两个参数应该如何赋值?


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/26 22:09:00
     
     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的博客2
    发贴心情 
    你的思维好奇怪噢,你无法实现复用模版的,如果你想通过配置化实现还是有可能的,我觉得你把模版当成了一个方法,来传参然后返回值这个思路是不对的
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/27 8:47:00
     
     Triumph1218 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:62
      门派:XML.ORG.CN
      注册:2005/9/1

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Triumph1218发送一个短消息 把Triumph1218加入好友 查看Triumph1218的个人资料 搜索Triumph1218在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Triumph1218的博客3
    发贴心情 
    那么应该如何实现?事实上XML中有很多这样的 List ,总不能一个一个写模板吧?效率太低了,而且当以后需要统一更改显示时还要一个一个修改吗?

    如果思路不对,那么应该是什么思路?

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/27 10:50:00
     
     火鸟 帅哥哟,离线,有人找我吗?
      
      
      等级:大四(GRE考了1500分!)
      文章:202
      积分:1198
      门派:XML.ORG.CN
      注册:2007/7/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给火鸟发送一个短消息 把火鸟加入好友 查看火鸟的个人资料 搜索火鸟在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看火鸟的博客4
    发贴心情 
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/27 10:51:00
     
     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的博客5
    发贴心情 
    XML Schema就像是数据库的表结构,不会随便改也不会是多样的
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/27 13:14:00
     
     shiwudao 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:16
      积分:177
      门派:XML.ORG.CN
      注册:2006/8/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给shiwudao发送一个短消息 把shiwudao加入好友 查看shiwudao的个人资料 搜索shiwudao在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看shiwudao的博客6
    发贴心情 
    尝试写了一个xsl来转换你的xml.因为不知道你确切的schema,只能根据list1, list2, list3分别进行判断,来使用不同的参数值来"调用" outlist模版。 xmlspy2007下测试通过。
    XML 为
    <?xml version="1.0" encoding="UTF-8"?>
    <list>
     <list1>
      <item id="1">ItemText1</item>
      <item id="2">ItemText2</item>
      <item id="3">ItemText3</item>
     </list1>
     <list2>
      <item id="1" attrib="attribvalue1">ItemText1</item>
      <item id="2" attrib="attribvalue2">ItemText2</item>
      <item id="3" attrib="attribvalue3">ItemText3</item>
     </list2>
     <list3>
      <item>ItemText1</item>
      <item>ItemText2</item>
      <item>ItemText3</item>
     </list3>
    </list>


    xsl为
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
     <xsl:output method="html"/>
     <xsl:template match="/">
      <xsl:apply-templates/>
     </xsl:template>
     <xsl:template match="/list/*">
      <xsl:choose>
       <xsl:when test="name() = 'list1'">
       <xsl:for-each select="item">
        <xsl:call-template name="outlist">
         <xsl:with-param name="listname">
          <xsl:value-of select="name(..)"/>
         </xsl:with-param>
         <xsl:with-param name="value">
          <xsl:value-of select="@id"/>
         </xsl:with-param>
         <xsl:with-param name="text">
          <xsl:value-of select="."/>
         </xsl:with-param>
        </xsl:call-template>
       </xsl:for-each>
       </xsl:when>
       <xsl:when test="name() = 'list2'">
       <xsl:for-each select="item">
        <xsl:call-template name="outlist">
         <xsl:with-param name="listname">
          <xsl:value-of select="name(..)"/>
         </xsl:with-param>
         <xsl:with-param name="value">
          <xsl:value-of select="@id"/>
         </xsl:with-param>
         <xsl:with-param name="text">
          <xsl:value-of select="@attrib"></xsl:value-of>
          <xsl:text> - </xsl:text>
          <xsl:value-of select="."/>
         </xsl:with-param>
        </xsl:call-template>
       </xsl:for-each>
       </xsl:when>
       <xsl:when test="name() = 'list3'">
       <xsl:for-each select="item">
        <xsl:call-template name="outlist">
         <xsl:with-param name="listname">
          <xsl:value-of select="name(..)"/>
         </xsl:with-param>
         <xsl:with-param name="value">
          <xsl:value-of select="."/>
         </xsl:with-param>
         <xsl:with-param name="text">
          <xsl:value-of select="."/>
         </xsl:with-param>
        </xsl:call-template>
       </xsl:for-each>
       </xsl:when>
      </xsl:choose>
     </xsl:template>
     <xsl:template name="outlist">
      <xsl:param name="listname"/>
      <xsl:param name="value"/>
      <xsl:param name="text"/>
      <div>
       <input type="checkbox" name="{$listname}" value="{$value}"/>
       <label>
        <xsl:value-of select="$text"/>
       </label>
      </div>
     </xsl:template>
    </xsl:stylesheet>

    转换结果为
    <div><input type="checkbox" name="list1" value="1"><label>ItemText1</label></div>
    <div><input type="checkbox" name="list1" value="2"><label>ItemText2</label></div>
    <div><input type="checkbox" name="list1" value="3"><label>ItemText3</label></div>
    <div><input type="checkbox" name="list2" value="1"><label>attribvalue1 - ItemText1</label></div>
    <div><input type="checkbox" name="list2" value="2"><label>attribvalue2 - ItemText2</label></div>
    <div><input type="checkbox" name="list2" value="3"><label>attribvalue3 - ItemText3</label></div>
    <div><input type="checkbox" name="list3" value="ItemText1"><label>ItemText1</label></div>
    <div><input type="checkbox" name="list3" value="ItemText2"><label>ItemText2</label></div>
    <div><input type="checkbox" name="list3" value="ItemText3"><label>ItemText3</label></div>

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/28 21:05: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/3/11 12:57:07

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

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