CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  XML/SOAP

XML中的分组与求和

楼主ChinaOk(农村表哥)2002-08-26 08:37:16 在 Web 开发 / XML/SOAP 提问

这是个XSLT技巧,通过generate-id()产生GroupID,并通过GroupID进行分组以及对组内的PV值求和。    
   
  XML代码:  
  <?xml   version="1.0"?>  
  <MarketConformity>  
   <RiskRow>  
    <GroupID>244133L</GroupID>  
    <TradeID>244133L_EUR_STUB</TradeID>  
    <PVinEuro1>-11121619.203</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>325866L</GroupID>  
    <TradeID>325866L_EUR_STUB</TradeID>  
    <PVinEuro1>-12121619.2938</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>325867L</GroupID>  
    <TradeID>325867L_EUR_STUB</TradeID>  
    <PVinEuro1>-14121619.293864</PVinEuro1>  
   </RiskRow>  
    <RiskRow><GroupID>502722L</GroupID>  
    <TradeID>502722L_EUR_STUB</TradeID>  
    <PVinEuro1>-13121543.293643</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>502722L</GroupID>  
    <TradeID>502722L_PLN_STUB</TradeID>  
    <PVinEuro1>-11234329.698236</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>325866L</GroupID>  
    <TradeID>506593L_EUR_STUB</TradeID>  
    <PVinEuro1>-11134543.12963</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>244133L</GroupID>  
    <TradeID>542056L_EUR_STUB</TradeID>  
    <PVinEuro1>-12342342.769823</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>325867L</GroupID>  
    <TradeID>553257L_PLN_STUB</TradeID>  
    <PVinEuro1>-98745908.128361</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>570079L</GroupID>  
    <TradeID>570079L</TradeID>  
    <PVinEuro1>-64325623.693286</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>570079L</GroupID>  
    <TradeID>570084L_EUR_STUB</TradeID>  
    <PVinEuro1>-67824233.986723</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>244133L</GroupID>  
    <TradeID>570090L</TradeID>  
    <PVinEuro1>-56721463.972345</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>325866L</GroupID>  
    <TradeID>570096L</TradeID>  
    <PVinEuro1>-87623763.23442</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>325867L</GroupID>  
    <TradeID>570098L</TradeID>  
    <PVinEuro1>-79843267.4232</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>244133L</GroupID>  
    <TradeID>570099L</TradeID>  
    <PVinEuro1>-87246234.23423</PVinEuro1>  
   </RiskRow>  
   <RiskRow>  
    <GroupID>325866L</GroupID>  
    <TradeID>570106L</TradeID>  
    <PVinEuro1>-32423896.4732</PVinEuro1>  
   </RiskRow>  
  </MarketConformity>  
     
   
  XSLT代码:  
  <xsl:stylesheet   version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <xsl:output   method   =   "text"     omit-xml-declaration="no"   standalone="no"   indent="yes"     />  
  <xsl:key   name   =   "keyGroupID"     match   ="RiskRow"   use   =   "GroupID"   />  
  <xsl:template   match="/">  
  <xsl:for-each   select   =   "//RiskRow[generate-id(.)=generate-id(key('keyGroupID',GroupID)[1])]">  
  <xsl:variable   name="lngGroupID"><xsl:value-of   select="GroupID"/></xsl:variable>  
  <xsl:text>The   groupID   is   =</xsl:text>  
  <xsl:value-of   select="$lngGroupID"   />  
  <xsl:text>|</xsl:text>  
  <xsl:variable   name="1stTradeID"   select="//RiskRow[GroupID=$lngGroupID]"/>  
  <xsl:call-template   name="ShowEmployeesInTeam">  
  <xsl:with-param   name="1stTradeID"   select="$1stTradeID"   />  
  </xsl:call-template>  
  <!--Put   carriage   return   and   linefeed   character   -->  
  <xsl:text>  
   
  </xsl:text>  
  </xsl:for-each>  
  </xsl:template>  
   
  <xsl:template   name="ShowEmployeesInTeam">  
  <xsl:param   name="1stTradeID"/>  
  <!--Show   the   details   of   Employee   currently   being   processes   -->  
  <xsl:for-each   select="$1stTradeID">  
  <!--Include   the   columns   here-->  
  <xsl:value-of   select="TradeID"   />   <xsl:text>   </xsl:text>  
  <xsl:value-of   select="PVinEuro1"   /><xsl:text>|</xsl:text>  
  </xsl:for-each>  
  <xsl:text>Sum   is   =   </xsl:text>  
  <!--Summation   on   PVinEuro1   and   format   the   number   till   6   decimal   point-->  
  <xsl:value-of   select='format-number(sum($1stTradeID/PVinEuro1),"###############.######")'   />  
  </xsl:template>  
  </xsl:stylesheet>  
  问题点数:20、回复次数:6Top

1 楼kingsoft111()回复于 2002-08-26 09:46:12 得分 5

感谢Chinaok兄对我们的指导,  
  受益非浅Top

2 楼jfly()回复于 2002-08-26 09:46:45 得分 5

非常感谢,正来找这个就撞倒了。  
  不过有2个错误。  
  1、xml中有全角的空格,出错。一开始没发现,奇怪了半天……  
  2、xsl中使用1stTradeID作变量名错误,难道你测试可以通过?Top

3 楼zlgun(自由人)回复于 2002-08-26 09:51:20 得分 5

真是好东东,我找这个好久了  
  Cooktop里要是有这个多好呀  
  收藏!!!Top

4 楼zlgun(自由人)回复于 2002-08-26 10:08:45 得分 5

确实有第二个错误  
  自己改一下变量名吧Top

5 楼jfly()回复于 2002-08-26 10:51:56 得分 0

其实微软的XMLSDK4里面就有比较好的例子,只不过是英文的。Top

6 楼fa2002(风翔万里)回复于 2002-12-13 18:54:40 得分 0

upTop

相关问题

  • 分组求与
  • checkbox分组选中
  • 分组中加顺序号
  • vf5.0报表中如何控制分组
  • DW中分组求和的问题。。。
  • 关于报表中的分组合计?
  • Sqlserver中如何按周分组呢?
  • 数据报表中的分组信息
  • DataEnvironment中存在分组问题~~~????????????????
  • 怎样在程序中改变分组?

关键词

  • xml
  • eur
  • stub
  • groupid

得分解答快速导航

  • 帖主:ChinaOk
  • kingsoft111
  • jfly
  • zlgun
  • zlgun

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo