新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   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的问题,高手门帮我解决一下!!!谢谢 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4644 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [求助]关于xsl的问题,高手门帮我解决一下!!!谢谢 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     haitian8080 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:27
      积分:384
      门派:XML.ORG.CN
      注册:2007/7/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给haitian8080发送一个短消息 把haitian8080加入好友 查看haitian8080的个人资料 搜索haitian8080在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看haitian8080的博客楼主
    发贴心情 [求助]关于xsl的问题,高手门帮我解决一下!!!谢谢

    我的xml:
    <?xml version="1.0" encoding="utf-8"?>
    <Bonus>
      <Dept>
          <DeptId>99901</DeptId>
          <Emplid>00001</Emplid>
          <DayBonus>100</DayBonus>
          <MonthBonus>1000</MonthBonus>
      </Dept>
      <Dept>
          <DeptId>99901</DeptId>
          <Emplid>00001</Emplid>
          <DayBonus>100</DayBonus>
          <MonthBonus>1000</MonthBonus>
      </Dept>
      <Dept>
       <DeptId>99901</DeptId>
          <Emplid>00001</Emplid>
          <DayBonus>100</DayBonus>
          <MonthBonus>1000</MonthBonus>
      </Dept>
      <Dept>
          <DeptId>99901</DeptId>
          <Emplid>00001</Emplid>
          <DayBonus>100</DayBonus>
          <MonthBonus>1000</MonthBonus>
      </Dept>
      <Dept>
          <DeptId>99901</DeptId>
          <Emplid>00001</Emplid>
          <DayBonus>100</DayBonus>
          <MonthBonus>1000</MonthBonus>
      </Dept>
      <Dept>
          <DeptId>99901</DeptId>
          <Emplid>00001</Emplid>
          <DayBonus>100</DayBonus>
          <MonthBonus>1000</MonthBonus>
      </Dept>
    </Bonus>


    我的xsl:
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="utf-8"/>
    <xsl:template match="/">
        <html>
        <body>
          <table cellpadding="0" cellspacing="0" border="1" style="border-collapse:collapse;font-size:14px;">
            <tr>
              <th>DeptId</th>
              <th>Emplid</th>
              <th>DayBonus</th>
              <th>MonthBonus</th>
            </tr>
            <xsl:for-each select="Bonus/Dept[not(DeptId=preceding::*/DeptId)]">
            
              <tr>   
                <td>
                  <xsl:value-of select="DeptId"></xsl:value-of>
                </td>
                <td>
                  <xsl:value-of select="Emplid"></xsl:value-of>
                </td>
                <td>
                  <xsl:value-of select="DayBonus"></xsl:value-of>
                </td>
                <td>
                  <xsl:value-of select="MonthBonus"></xsl:value-of>
                </td>          
                 </tr>
              <tr>
              <td></td>
              <td></td>
              <td><xsl:value-of select="sum(../Dept[DeptId=current()/DeptId]/DayBonus)"/>
                </td>
                <td><xsl:value-of select="sum(../Dept[DeptId=current()/DeptId]/MonthBonus)"/>
                </td></tr>
              </xsl:for-each-group>
          </table>
        </body>
        </html>
    </xsl:template>
    </xsl:stylesheet>
    可是上面的xml与xsl显示的结果是:

    DeptId   Emplid   DayBonus   MonthBonus
    99901    00001    100         1000
       奖金总计:       300         3000

    99902    00001    100         1000
       奖金总计:       300         3000

    需求要的结果:
    DeptId   Emplid   DayBonus   MonthBonus
    99901    00001    100         1000
    99901    00002    100         1000
    99901    00003    100         1000
       奖金总计:       300         3000

    99902    00001    100         1000
    99902    00002    100         1000
    99902    00003    100         1000
       奖金总计:       300         3000


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/11 21:24:00
     
     haitian8080 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:27
      积分:384
      门派:XML.ORG.CN
      注册:2007/7/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给haitian8080发送一个短消息 把haitian8080加入好友 查看haitian8080的个人资料 搜索haitian8080在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看haitian8080的博客2
    发贴心情 
    for-each-group 是xsl 2.0 的新特性可以;但是在ERP中没发用2.0新特性 ;只能用1.0
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/11 21:54:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客3
    发贴心情 
    不知道LZ对XPath了解多少,你知道在你的代码(xsl:for-each)中 not 和 preceding::* 在此起什么作用吗?
    1、去掉xsl:for-each中的过滤语句;
    2、再改第2个tr,增一个xsl:if判断:
    <xsl:if test="not(DeptId=following::*/DeptId)">
    <tr>
    <td></td>
    <td></td>
    <td><xsl:value-of select="sum(../Dept[DeptId=current()/DeptId]/DayBonus)"/>
    </td>
    <td><xsl:value-of select="sum(../Dept[DeptId=current()/DeptId]/MonthBonus)"/>
    </td>
    </tr>
    </xsl:if>
    运行结果:
    DeptId Emplid DayBonus MonthBonus
    99901 00001 100 1000
    99901 00001 100 1000
    99901 00001 100 1000
      300 3000
    99902 00001 100 1000
    99902 00001 100 1000
    99902 00001 100 1000
      300 3000
    正是你想要的。


    但是,得么这个结果的前提似乎是DeptId相邻,如果参杂在一起,这个可能就得利用递归了,也许先按DeptId排序也可以吧。

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

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

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

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客4
    发贴心情 
    对了,如果DeptId次序打乱,可以先按DeptId排序。测试结果如上。

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

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

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/12 9:08:00
     
     haitian8080 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:27
      积分:384
      门派:XML.ORG.CN
      注册:2007/7/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给haitian8080发送一个短消息 把haitian8080加入好友 查看haitian8080的个人资料 搜索haitian8080在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看haitian8080的博客5
    发贴心情 
    谢谢高手了!!!!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/12 10:48:00
     
     haitian8080 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:27
      积分:384
      门派:XML.ORG.CN
      注册:2007/7/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给haitian8080发送一个短消息 把haitian8080加入好友 查看haitian8080的个人资料 搜索haitian8080在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看haitian8080的博客6
    发贴心情 
    following代表什么意思吗????????????????
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/12 10:50: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/1/3 1:33:37

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

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