用户操作
[即时聊天] [发私信] [加为好友]
王颂毓ID:ChinaOk
19158次访问,排名6554(1),好友0人,关注者0人。
ChinaOk的文章
原创 29 篇
翻译 0 篇
转载 0 篇
评论 2 篇
最近评论
mghueh:wow power leveling
oddoooooooo:三个文件的Zip包
无法打开
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 用XML/XSLT将行数据转换为列数据收藏

    新一篇: 在java中编程实现数字签名系统 | 旧一篇: Delphi 7前瞻:将Delphi作为ASP.NET的脚本语言(下)

    摘要
    长期以来,如何将行数据转换成列数据一直是个很普遍的问题。
    本文介绍用XSL转换XML的方法。XML的数据取自数据库的行数据,然后用XSL转换输出为列数据。

    示例中,用GroupID元素表示为行数据,用TradeID表示转换后的列数据。

    用xsl:key为每个GroupID生成唯一key。

    变量1stGroupID为GroupID所有子树的入口。用<xsl:value-of ...>得到列值。

    每个GroupID都调用ShowTradesInGroup模板。

    在ShowTradesInGroup模板中,循环得到GroupID的所有子树。

    XML数据(数据库表中各行纪录):
    <?xml version="1.0"?>
    <MarketConformity>
       <RiskRow>
          <GroupID>244133L</GroupID>
          <TradeID>244133L_EUR_STUB</TradeID>
       </RiskRow>
       <RiskRow>
          <GroupID>325866L</GroupID>
          <TradeID>325866L_EUR_STUB</TradeID>
       </RiskRow>
       <RiskRow>
          <GroupID>244133L</GroupID>
          <TradeID>325867L_EUR_STUB1</TradeID>
       </RiskRow>
       <RiskRow>
          <GroupID>502722L</GroupID>
          <TradeID>502722L_EUR_STUB</TradeID>
       </RiskRow>
       <RiskRow>
          <GroupID>244133L</GroupID>
          <TradeID>325867L_EUR_STUB2</TradeID>
       </RiskRow>
       <RiskRow>
          <GroupID>502722L</GroupID>
          <TradeID>502722L_EUR_STUB1</TradeID>
       </RiskRow>
       <RiskRow>
          <GroupID>502722L</GroupID>
          <TradeID>502722L_EUR_STUB2</TradeID>
       </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="1stGroupID"><xsl:value-of select="GroupID"/></xsl:variable>
       <xsl:value-of select="$1stGroupID" />
       <xsl:variable name="1stTradeID" select="//RiskRow[GroupID=$1stGroupID]"/>
       <xsl:call-template name="ShowTradesInGroup">
        <xsl:with-param name="1stTradeID" select="$1stTradeID" />
       </xsl:call-template>
       <xsl:text>

    </xsl:text>
      </xsl:for-each>
     </xsl:template>

    <!--用ShowTradesInGroupID模板找出指定GroupID的所有Trade-->
     <xsl:template name="ShowTradesInGroup">
      <xsl:param name="1stTradeID"/>
      <xsl:for-each select="$1stTradeID">
       <xsl:text>, </xsl:text>
       <!-- 在这里给出列的值 -->
       <xsl:value-of select="TradeID" />
      </xsl:for-each>
     </xsl:template>

    </xsl:stylesheet>
     

    结果输出为:
    244133L, 244133L_EUR_STUB, 325867L_EUR_STUB1, 325867L_EUR_STUB2
    325866L, 325866L_EUR_STUB
    502722L, 502722L_EUR_STUB, 502722L_EUR_STUB1, 502722L_EUR_STUB2

    发表于 @ 2002年08月19日 09:12:00|评论(loading...)|编辑

    新一篇: 在java中编程实现数字签名系统 | 旧一篇: Delphi 7前瞻:将Delphi作为ASP.NET的脚本语言(下)

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © ChinaOk