以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  问题解决了,发出来让给大家参考  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=46579)


--  作者:gu_xiaorou
--  发布时间:5/8/2007 4:26:00 PM

--  问题解决了,发出来让给大家参考
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b/>
</a>
<a>
<b/>
</a>
<a>
<b/>
</a>
<a>
<b/>
</a>

<a>
<b/>
</a>
<a>
<b/>
</a>
......

数a的个数,当a能被三整除的时候+1,以此类推
如: 第一个a是1
      第二个a是2
      第三个a是3+1(因为被三整除所以加一)
      第四个a是5(在上个a基础上加一)
      第五个a是6+1(因为被三整除所以加一)
      第六个a是8(在上个a基础上加一)
      第七个a是9+1(因为被三整除所以加一)
。。。。。以此类推

请大侠帮助


[此贴子已经被作者于2007-5-11 9:36:58编辑过]

--  作者:gu_xiaorou
--  发布时间:5/11/2007 9:35:00 AM

--  
问了个高手,给解决了,我还没看明白,先给大家分享一下
<xml文件>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="1.xslt"?>
<lizi>
 <a>1</a>
 <a>
  2
 </a>
 <a>
  3
 </a>
 <a>
  4
 </a>
 <a>
  5
 </a>
 <a>
  6
 </a>
 <a>
  7
 </a>
 <a>
  8
 </a>
 <a>
  9
 </a>
 <a>
  11
 </a>
 
 <a>
  12
 </a>
 <a>
  13
 </a>
 <a>
  14
 </a>
 <a>
  15
 </a>
 <a>
  16
 </a>
</lizi>

<xsl文件>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" version="1.0" encoding="gb2312" indent="yes"/>
 <xsl:template match="/">
  <xsl:apply-templates select="/lizi/a"/>
 </xsl:template>
 <xsl:template match="/lizi/a">
  <xsl:variable name="v" select="."/>
  <!--本次记算值-->
  <xsl:variable name="v1">
   <xsl:call-template name="SpecV">
    <xsl:with-param name="v" select="."/>
   </xsl:call-template>
  </xsl:variable>
  <!--上次序号,-->
  <xsl:variable name="p" select="position()-1"/>
  <!--本次值,-->
  <xsl:variable name="v2">
   <xsl:call-template name="SpecV">
    <xsl:with-param name="v" select="/lizi/a[$p]"/>
   </xsl:call-template>
  </xsl:variable>
  <!--比较值输出-->
  <xsl:choose>
   <xsl:when test="$v1 = $v2">
    <xsl:value-of select="$v1+1"/>
   </xsl:when>
   <xsl:otherwise>
    <xsl:value-of select="$v1"/>
   </xsl:otherwise>
  </xsl:choose>
  ,
 </xsl:template>
 <!--计算一个数字-->
 <xsl:template name="SpecV">
  <xsl:param name="v"/>
  <xsl:variable name="v2" select="$v + floor($v div 3)"/>
  <xsl:choose>
   <xsl:when test="$v2 mod 3 = 0">
    <xsl:value-of select="$v2+1"/>
   </xsl:when>
   <xsl:otherwise>
    <xsl:value-of select="$v2"/>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>


--  作者:gogy
--  发布时间:5/12/2007 9:37:00 PM

--  
来个短点的。
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="a">
 <xsl:value-of select="concat((floor(count(preceding-sibling::a) div 2) + count(preceding-sibling::a) +1),' , ')"/>
  </xsl:template>
</xsl:stylesheet>
--  作者:gu_xiaorou
--  发布时间:5/14/2007 9:53:00 AM

--  
额地神呀,太厉害了,不过我还是不太明白,这个命令concat具体的用法,为什么能做出来呢,能帮忙解释一下吗?那就太感谢了。。。

我的msn:yinghaoyanxiu@hotmail.com


--  作者:Qr
--  发布时间:5/14/2007 10:32:00 AM

--  
concat()为字符处理函数,具体是将两个以上字符串连接起来。
concat("the"," ","XML")输出:the XML
上面的代码就是:
<xsl:value-of select="floor(count(preceding-sibling::a) div 2) + count(preceding-sibling::a) +1"/>

实际上,这可以说是条数学问题,找到规律了,问题就解决了。


--  作者:nettzar
--  发布时间:5/14/2007 11:06:00 AM

--  
xslt中,数字可以进行加减。 字母是否有什么方法进行加碱呢?
如:从a到e.  如何用循环或者别的方法将 a, b, c, d ,e 顺次输出?即如何将任意2个字母之间的字母各自输出?

谢谢~


--  作者:gu_xiaorou
--  发布时间:5/14/2007 1:43:00 PM

--  
不太明白楼上的人想问什么?把效果说一下呗
--  作者:gogy
--  发布时间:5/14/2007 8:13:00 PM

--  
我没有MSN啊,照Qr的理解就可以了。
nettzar 的问题,在XSLT2.0里容易解决,在1.0里,用递归模板吧。
--  作者:gu_xiaorou
--  发布时间:5/15/2007 9:03:00 AM

--  
拿好吧,我在自己好好想想 :)
--  作者:nettzar
--  发布时间:5/15/2007 9:39:00 AM

--  
以下是引用gu_xiaorou在2007-5-14 13:43:00的发言:
不太明白楼上的人想问什么?把效果说一下呗

就是说, 如果原文中给出的是:b--e, 如何输出:b, c, d, e?      (b, e 属于26字母中的任意两个)

<test>b&ndash;e</test>

----------> <test>b</test>
             <test>c</test>
             <test>d</test>
             <test>e</test>


--  作者:nettzar
--  发布时间:5/15/2007 9:46:00 AM

--  
以下是引用gogy在2007-5-14 20:13:00的发言:
nettzar 的问题,在XSLT2.0里容易解决,在1.0里,用递归模板吧。

偶现在用的还是1.0, 好多xpath2.0的表达式不能用。

<test>a&ndash;f</test>

这里面的&ndash; 是否有方法进行查询啊?还有这个递归模版能否给点提示啊?谢谢!


--  作者:gu_xiaorou
--  发布时间:5/15/2007 3:05:00 PM

--  
用<xsl:sort case-order="lower-first">不可以做出来吗?我也不知道能不能做出来,就是查书查到的,你试试吧


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms