以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  求xsl数值相加的问题,很急,请大家帮帮忙。。  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=63166)


--  作者:jzzxl2010
--  发布时间:5/28/2008 11:30:00 AM

--  求xsl数值相加的问题,很急,请大家帮帮忙。。
xml如下:
<?xml version="1.0" encoding="gb2312"?>
<root>
  <dept code="07" name="一中队">
    <jtlx code="01">
      <count1>1</count1>
      <count2>2</count2>
    </jtlx>
    <jtlx code="02">
      <count1>3</count1>
      <count2>4</count2>
    </jtlx>
    <jtlx code="03">
      <count1>5</count1>
      <count2>6</count2>
    </jtlx>
    <jtlx code="06">
      <count1>7</count1>
      <count2>8</count2>
    </jtlx>
  </dept>
  <dept code="08" name="二中队">
    <jtlx code="01">
      <count1>1</count1>
      <count2>2</count2>
    </jtlx>
    <jtlx code="02">
      <count1>3</count1>
      <count2>4</count2>
    </jtlx>
    <jtlx code="03">
      <count1>5</count1>
      <count2>6</count2>
    </jtlx>
    <jtlx code="06">
      <count1>7</count1>
      <count2>8</count2>
    </jtlx>
  </dept> 
</root>
想通过xsl得到如下结果(顿号为分隔符,表示count1和count2),如
部门  01 02 03 06 合计
一中队  1、2 3、4 5、6 7、8 16、20 
二中队  1、2 3、4 5、6 7、8 16、20
合计  2、4 6、10 10、12 14、16 32、40
--  作者:jzzxl2010
--  发布时间:5/28/2008 11:38:00 AM

--  
<table border="1">
 <tr>
  <td>部门</td>
  <td>01</td>
  <td>02</td>
  <td>03</td>
  <td>06</td>
  <td>合计</td>
 </tr>
 <tr>
  <td>一中队</td>
  <td>1、2</td>
  <td>3、4</td>
  <td>5、6</td>
  <td>7、8</td>
  <td>16、20</td>
 </tr>
 <tr>
  <td>二中队</td>
  <td>1、2</td>
  <td>3、4</td>
  <td>5、6</td>
  <td>7、8</td>
  <td>16、20</td>
 </tr>
 <tr>
  <td>合计</td>
  <td>2、4</td>
  <td>6、10</td>
  <td>10、12</td>
  <td>17、16</td>
  <td>32、40</td>
 </tr>
</table>
--  作者:Qr
--  发布时间:5/28/2008 12:38:00 PM

--  
只知道sum()可以进行求和,但看不出你想要做什么。
--  作者:jzzxl2010
--  发布时间:5/28/2008 1:09:00 PM

--  
我想生成一个TABLE,列和行分别求和,如二楼内容
--  作者:Qr
--  发布时间:5/28/2008 7:24:00 PM

--  
没有按你的要求写成一个TABLE,纯粹输出文本,自己加上TABLE吧。
<xsl:template match="/">
 <xsl:apply-templates select="//dept"/> 
 <xsl:apply-templates select="root/dept[last()]/jtlx" mode="sumcol"/>
</xsl:template>

<xsl:template match="dept">
 <xsl:apply-templates select="jtlx"/><br/>
</xsl:template>

<xsl:template match="jtlx">
 <xsl:value-of select="count1"/>
 <xsl:text>、</xsl:text>
 <xsl:value-of select="count2"/>
 <xsl:text>    </xsl:text>
 <xsl:if test="position()=last()">
  <xsl:value-of select="sum(..//count1)"/>
  <xsl:text>、</xsl:text>
  <xsl:value-of select="sum(..//count2)"/>
 </xsl:if>
</xsl:template>

<xsl:template match="jtlx" mode="sumcol">
 <xsl:variable name="currentcode" select="@code"/>
 <xsl:value-of select="sum(../..//count1[../@code=$currentcode])"/>
 <xsl:text>、</xsl:text>
 <xsl:value-of select="sum(../..//count2[../@code=$currentcode])"/>
 <xsl:text>    </xsl:text>
 <xsl:if test="position()=last()">
  最后这步,就不写了,让你有所思考吧,都由我包干了不好
 </xsl:if>
</xsl:template>


--  作者:Qr
--  发布时间:5/28/2008 7:28:00 PM

--  
按你的要求,这里用命名模板可能代码更简单些,考虑到递归可能比较难理解,就不给代码了,有兴趣大家可以去完善它。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
3,953.125ms