CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  XML/SOAP

在 xsl 中如何在select中使用变量?

楼主myy()2005-01-06 09:51:17 在 Web 开发 / XML/SOAP 提问

比如:  
  ---------------------------------------------------  
  <?xml-stylesheet   type="text/xsl"   href="std.xsl"?>  
  <?xml   version="1.0"   encoding="GBK"?>  
  <T>  
      <C   key="C1">  
          <C1   name="汉字"></C1>  
          <C2   name="拼音"></C2>  
      </C>  
      <R   id="1">  
          <C1>一</C1>  
          <C2>yi</C2>  
      </R>  
      <R   id="2">  
          <C1>丁</C1>  
          <C2>ding</C2>  
      </R>  
  </T>  
  ---------------------------------------------------  
  <xsl:variable   name="KeyCol"   select="/T/C/@key"   />  
  <!--KeyCol的值指出C1,C2谁是主键-->  
  ...  
      <xsl:template   match="R">  
          <tr>  
              <td   align="center">  
                  <input   type="checkbox>  
                      <xsl:attribute   name="value">  
                          <xsl:value-of   select="./$KeyCol"/>  
            <!--在这里我想把KeyCol的值'C1'作为选择节点的表达式-->  
                      </xsl:attribute>  
                  </input>  
              </td>  
              <xsl:for-each   select="*">  
                  <td><xsl:value-of   select="."   /></td>  
              </xsl:for-each>  
          </tr>  
      </xsl:template>  
  问题点数:100、回复次数:18Top

1 楼myy()回复于 2005-01-06 09:53:14 得分 0

xsl:value-of   select="$KeyCol"/>   这样也不对,得到的checkbox的value直接为'C1'Top

2 楼zhmt(孜风)回复于 2005-01-06 10:01:30 得分 100

可以直接用js去修改要使用变量的结点的属性值的  
  给你的包含xsl代码的xml结点一个id属性xslId  
  然后可以直接这样:  
  var   node   =   xslId.selectSingleNode("//td/input/xsl:attribute/");  
  node.text   =   "像要赋的值";Top

3 楼zhmt(孜风)回复于 2005-01-06 10:02:51 得分 0

我感觉把谁是key放到xml中来处理更好啊Top

4 楼zhmt(孜风)回复于 2005-01-06 10:06:56 得分 0

<xsl:value-of   select="./$KeyCol"/>  
  为什么不直接用<xsl:value-of   select="//T/C/@key"/>呢?Top

5 楼myy()回复于 2005-01-06 10:09:34 得分 0

谢谢楼上关注。  
   
  >>我感觉把谁是key放到xml中来处理更好啊  
   
  为了减小xml的大小,把C1,C2的相信息集中放在<C></C>中,  
  <C>...</C>可以看作“"字段”的描述信息。  
  下面的<R>...</R>其实就是一个个的“记录”。Top

6 楼zhmt(孜风)回复于 2005-01-06 10:10:30 得分 0

$KeyCol中存放的为C1所以输出出来也就是C1,  
  换成这样:  
  判断$KeyCol存放的是否为C1,是,就输出C1结点的值;不是,你自己处理Top

7 楼myy()回复于 2005-01-06 10:14:21 得分 0

直接用<xsl:value-of   select="//T/C/@key"/>也不对,  
   
  我要的是T/C/@key的值'C1'在每个<R>...</R>中相应的<C1></C1>的内容,  
  比如'一','丁',让后放在当前的checkbox的value,  
  如果T/C/@key的值是'C2',当前checkbox的value就是'yi','ding'Top

8 楼zhmt(孜风)回复于 2005-01-06 10:22:40 得分 0

我知道了  
  这样把:输出value之前判断T/C/@key中的值,为C1,输出“C1结点”的值  
  <xsl:if   test="./$KeyCol='C1'">  
      <xsl:value-of   select="C1"/>  
  </xsl:if>  
  <xsl:if   test="./$KeyCol='C2'">  
      <xsl:value-of   select="C2"/>  
  </xsl:if>Top

9 楼myy()回复于 2005-01-06 10:30:59 得分 0

这样不太好吧?我的C1,C2...个数并不是固定的呀。Top

10 楼zhmt(孜风)回复于 2005-01-06 10:35:19 得分 0

我觉得这样更好一点:  
  <T>  
      <R   id="1">  
          <CC   key='true'>一</CC>  
          <CC>yi</CC>  
      </R>  
      <R   id="2">  
          <CC   key='true'>丁</CC>  
          <CC>ding</CC>  
      </R>  
  </T>  
  对每条记录,输出(属性key的为true的)结点值Top

11 楼myy()回复于 2005-01-06 10:42:39 得分 0

为了减小xml的大小,把C1,C2...的相信息集中放在<C></C>中,  
  其实,每个"字段"的相关信息比较多的,不光key,还有显示名,类型,精度...等,  
  在记录中会无意义的重复很多次。  
  Top

12 楼zhmt(孜风)回复于 2005-01-06 10:46:15 得分 0

也可以这样,  
  <T>  
      <C   key="1">  
          <C1   name="汉字"></C1>  
          <C2   name="拼音"></C2>  
      </C>  
      <R   id="1">  
          <CC   key='true'>一</CC>  
          <CC>yi</CC>  
      </R>  
      <R   id="2">  
          <CC   key='true'>丁</CC>  
          <CC>ding</CC>  
      </R>  
  </T>  
   
  <xsl:for-each   select="/T/R">  
      <xsl:for-each   select="CC">  
          <xsl:if   test="positon()=number(././C/@key)">  
              <xsl:value-of   select="."   />  
          </xsl:if>  
      </xsl:for-each>  
  </xsl:for-each>Top

13 楼zhmt(孜风)回复于 2005-01-06 10:51:25 得分 0

呵呵,按你现在的XML,你可以遍历R下的所有结点  
  看看结点名字(name()用获得)是否等于KeyCol,相等的话,输出该结点的值     就可以了Top

14 楼zhmt(孜风)回复于 2005-01-06 10:58:17 得分 0

基本就是下面这样,你调试一下  
  <input   type="checkbox>  
      <xsl:attribute   name="value">  
          <xsl:if   test="./$KeyCol=name()"  
              <xsl:value-of   select="./$KeyCol"/>  
          </xsl:if>  
      </xsl:attribute>  
  </input>Top

15 楼myy()回复于 2005-01-06 11:45:27 得分 0

谢谢zhmt((……&gt;!))   ,你的还是有问题,if外面还要循环才行,不过还是很感谢你!  
   
   
   
  自己解决了   :-D  
   
  <input   type="checkbox>  
      <xsl:attribute   name="value">  
          <xsl:value-of   select="./*[name()=$KeyCol]"/>  
      </xsl:attribute>  
  </input>  
   
   
  Top

16 楼zhmt(孜风)回复于 2005-01-06 11:46:45 得分 0

是啊,我也知道忘了,我想再回帖提醒你,但是系统提示我   不能连续3次以上回帖    
  还好你搞定了Top

17 楼zhmt(孜风)回复于 2005-01-06 11:48:07 得分 0

<input   type="checkbox>  
      <xsl:attribute   name="value">  
          <xsl:for-each   select="*">  
              <xsl:if   test="./$KeyCol=name()">  
                  <xsl:value-of   select="./$KeyCol"/>  
              </xsl:if>  
          </xsl:for-each>  
      </xsl:attribute>  
  </input>Top

18 楼zhmt(孜风)回复于 2005-01-06 11:56:41 得分 0

呵呵,你这个方法比我的简洁多了,学习Top

相关问题

  • 在xsl中使用变量的问题
  • Select语句中使用变量出错
  • public 变量使用
  • Cookie变量使用?
  • java 变量的变量使用
  • 怎样在bcb的select语句中使用变量?
  • 怎样在select语句中使用变量?
  • 怎样在SQL语句的SELECT字句中使用变量?
  • 数组变量的使用
  • 如何在sql server的存储过程中使用select 栏位名 into 变量名

关键词

  • 结点
  • xsl
  • 属性
  • 信息
  • xml
  • c1
  • 输出
  • keycol
  • 值
  • yi丁ding

得分解答快速导航

  • 帖主:myy
  • zhmt

相关链接

  • Web开发类图书

广告也精彩

反馈

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