新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   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中如何改变变量的值,是不是用with-param 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 24450 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 痛苦,想知道在xsl中如何改变变量的值,是不是用with-param 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     amlworkflow 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:18
      积分:179
      门派:XML.ORG.CN
      注册:2004/10/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给amlworkflow发送一个短消息 把amlworkflow加入好友 查看amlworkflow的个人资料 搜索amlworkflow在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看amlworkflow的博客楼主
    发贴心情 痛苦,想知道在xsl中如何改变变量的值,是不是用with-param

    我现在需要在xsl中设置一个整型数,每一次循环都不一样,应该怎么做?是不是用para?清各位大虾指点一下。

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/9 17:17:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客2
    发贴心情 
    <xsl:variable是一旦设定就不能改变的;<xsl:param是template接收参数的变量,<xsl:with-param是在<xsl:call-template时传参的参数,想要改变就只能用递归通过with-param和param来改变了。:)
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/10 9:04:00
     
     amlworkflow 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:18
      积分:179
      门派:XML.ORG.CN
      注册:2004/10/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给amlworkflow发送一个短消息 把amlworkflow加入好友 查看amlworkflow的个人资料 搜索amlworkflow在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看amlworkflow的博客3
    发贴心情 
    非常感谢doubleG!
    虽然with-param作为参数能改变,但只要一出作用调用就不存在了。我想在多次调用时,能够产生为一个唯一序列号,有办法吗?谢谢!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/10 16:40:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客4
    发贴心情 
    不太清楚你是用那个唯一ID做什么,但是在一个template内生成的变量作用域就仅限于该template,所以一般要做什么事情就在该template内做了,因为也没有返回值的这种说法。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/10 18:11:00
     
     amlworkflow 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:18
      积分:179
      门派:XML.ORG.CN
      注册:2004/10/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给amlworkflow发送一个短消息 把amlworkflow加入好友 查看amlworkflow的个人资料 搜索amlworkflow在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看amlworkflow的博客5
    发贴心情 
    我不知道能不能在同一个template中做
    原XML文件如下;
    <root>
     <a>
      <a1>
       <ID>a11</ID>
       <Name>A11</Name>
       <RID>3</RID>
      </a1>
      <a1>
       <ID>a12</ID>
       <Name>A12</Name>
       <RID>3</RID>
      </a1>
     </a>
     <b>
      <b1>
       <ID>b11</ID>
       <Name>B11</Name>
       <RID>3</RID>
      </b1>
      <b1>
       <ID>b12</ID>
       <Name>B12</Name>
       <RID>3</RID>
      </b1>
     </b>
     <r>
      <r1>
       <ID>r11</ID>
       <rs>a11</rs>
       <re>b12</re>
      </r1>
     </r>
    </root>

    目标XML文件如下:
    <root>
     <a>
      <a1>
       <ID>1</ID>
       <Name>A11</Name>
       <RID>3</RID>
      </a1>
      <a1>
       <ID>2</ID>
       <Name>A12</Name>
       <RID>3</RID>
      </a1>
     </a>
     <b>
      <b1>
       <ID>3</ID>
       <Name>B11</Name>
       <RID>3</RID>
      </b1>
      <b1>
       <ID>4</ID>
       <Name>B12</Name>
       <RID>3</RID>
      </b1>
     </b>
     <r>
      <r1>
       <ID>5</ID>
       <rs>1</rs>
       <re>2</re>
      </r1>
      <r1>
       <ID>6</ID>
       <rs>2</rs>
       <re>3</re>
      </r1>  
     </r>
    </root>
    就是做如上的转换。
    将所有字符串的ID号改成整型数的ID号,同时在关系(节点r)中插入相关节点。就是这样的。
    有办法吗?

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/11 9:05:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客6
    发贴心情 
    你的最终XML和目标XML不配套吧,第一个r1只有一个,第二个就有两个了,哈哈
    代码都给你们写了,好歹我的代码也值几个钱吧。哎,最近穷得厉害啊,哪位在北京的有事没事请老哥吃顿饭啊,看我多辛苦啊。多省几顿饭钱啊,哈哈。

    方法一:
    <?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:template match="root">
      <xsl:copy>
       <xsl:for-each select="child::*">
        <xsl:copy>
         <xsl:for-each select="child::*">
          <xsl:choose>
           <xsl:when test="name(..)!='r'"><xsl:call-template name="setCommonNode"/></xsl:when>
           <xsl:otherwise>
           <xsl:call-template name="setRefNode"/>
          </xsl:otherwise>
          </xsl:choose>
          
         </xsl:for-each>
        </xsl:copy>
       </xsl:for-each>
      </xsl:copy>
     </xsl:template>
     <xsl:template name="setCommonNode">
      <xsl:copy>
       <xsl:variable name="posValue" select="position()"/>
       <xsl:for-each select="child::*">
        <xsl:choose>
         <xsl:when test="name(.)='ID'">
          <xsl:element name="ID">
           <xsl:call-template name="setID">
            <xsl:with-param name="idtempValue" select="$posValue"/>
            <xsl:with-param name="curNode" select="../../preceding-sibling::*[1]"/>
           </xsl:call-template>
          </xsl:element>
         </xsl:when>
         <xsl:otherwise>
          <xsl:copy-of select="."/>
         </xsl:otherwise>
        </xsl:choose>
       </xsl:for-each>
      </xsl:copy>
     </xsl:template>
     
     <xsl:template name="setRefNode">
      <xsl:copy>
       <xsl:variable name="posValue" select="position()"/>
       <xsl:for-each select="child::*">
        <xsl:choose>
         <xsl:when test="name(.)='ID'">
          <xsl:element name="ID">
           
           <xsl:call-template name="setID">
            <xsl:with-param name="idtempValue" select="$posValue"/>
            <xsl:with-param name="curNode" select="../../preceding-sibling::*[1]"/>
           </xsl:call-template>
          </xsl:element>
         </xsl:when>
         <xsl:otherwise>
          <xsl:copy>
          <xsl:call-template name="setRefID">
           <xsl:with-param name="refID" select="."/>
          </xsl:call-template>
          </xsl:copy>
         </xsl:otherwise>
        </xsl:choose>
       </xsl:for-each>
      </xsl:copy>
     </xsl:template>
     
     <xsl:template name="setRefID">
      <xsl:param name="refID"/>
      <xsl:variable name="refNode" select="../../..//ID[.=$refID]"/>
      <xsl:value-of select="count($refNode/preceding::ID) +1"/>
     </xsl:template>
     
     <xsl:template name="setID">
      <xsl:param name="idtempValue"/>
      <xsl:param name="curNode"/>
      <xsl:choose>
       <xsl:when test="count($curNode/preceding-sibling::*)!=0">
        <xsl:call-template name="setID">
         <xsl:with-param name="idtempValue" select="$idtempValue + count($curNode/child::*)"/>
         <xsl:with-param name="curNode" select="$curNode/preceding-sibling::*[1]"/>
        </xsl:call-template>
       </xsl:when>
       <xsl:otherwise>
        <xsl:value-of select="$idtempValue + count($curNode/child::*)"/>
       </xsl:otherwise>
      </xsl:choose>
     </xsl:template>
    </xsl:stylesheet>

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/11 16:24:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客7
    发贴心情 
    看着吓到了吧,其实那个方法笨,写着写着发现了。最近脑子不行了,要大补才行啊。赶紧请吃饭啊!!!!
    方法二:
    <?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:template match="root">
      <xsl:copy>
       <xsl:for-each select="child::*">
        <xsl:copy>
         <xsl:for-each select="child::*">
          <xsl:choose>
           <xsl:when test="name(..)!='r'">
            <xsl:call-template name="setCommonNode"/>
           </xsl:when>
           <xsl:otherwise>
            <xsl:call-template name="setRefNode"/>
           </xsl:otherwise>
          </xsl:choose>
         </xsl:for-each>
        </xsl:copy>
       </xsl:for-each>
      </xsl:copy>
     </xsl:template>
     <xsl:template name="setCommonNode">
      <xsl:copy>
       <xsl:variable name="posValue" select="position()"/>
       <xsl:for-each select="child::*">
        <xsl:choose>
         <xsl:when test="name(.)='ID'">
          <xsl:element name="ID">
           <xsl:value-of select="count(preceding::ID) +1"/>
          </xsl:element>
         </xsl:when>
         <xsl:otherwise>
          <xsl:copy-of select="."/>
         </xsl:otherwise>
        </xsl:choose>
       </xsl:for-each>
      </xsl:copy>
     </xsl:template>
     <xsl:template name="setRefNode">
      <xsl:copy>
       <xsl:variable name="posValue" select="position()"/>
       <xsl:for-each select="child::*">
        <xsl:choose>
         <xsl:when test="name(.)='ID'">
          <xsl:element name="ID">
           <xsl:value-of select="count(preceding::ID) +1"/>
          </xsl:element>
         </xsl:when>
         <xsl:otherwise>
          <xsl:copy>
           <xsl:call-template name="setRefID">
            <xsl:with-param name="refID" select="."/>
           </xsl:call-template>
          </xsl:copy>
         </xsl:otherwise>
        </xsl:choose>
       </xsl:for-each>
      </xsl:copy>
     </xsl:template>
     <xsl:template name="setRefID">
      <xsl:param name="refID"/>
      <xsl:variable name="refNode" select="../../..//ID[.=$refID]"/>
      <xsl:value-of select="count($refNode/preceding::ID) +1"/>
     </xsl:template>
    </xsl:stylesheet>

    好像也没少多少啊,嘿嘿

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/11 16:26:00
     
     amlworkflow 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:18
      积分:179
      门派:XML.ORG.CN
      注册:2004/10/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给amlworkflow发送一个短消息 把amlworkflow加入好友 查看amlworkflow的个人资料 搜索amlworkflow在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看amlworkflow的博客8
    发贴心情 
    谢谢了,怎么给你报酬啊!顺便问一下:金钱,经验,文采有什么用途?


    [此贴子已经被作者于2005-3-11 21:56:28编辑过]
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/11 21:31:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客9
    发贴心情 
    我也不懂啊,要在北京的话请我吃饭吧,^_^
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/13 13:20:00
     
     amlworkflow 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:18
      积分:179
      门派:XML.ORG.CN
      注册:2004/10/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给amlworkflow发送一个短消息 把amlworkflow加入好友 查看amlworkflow的个人资料 搜索amlworkflow在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看amlworkflow的博客10
    发贴心情 
    很想交你这个朋友,只可惜我不在北京,有机会去北京一定请吃饭。还有一个小问题请教一下:我的目标文件就是与原文件不一样,我想应该是可以添加的。你认为呢?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/13 22:29:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/13 21:20:35

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

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