以文本方式查看主题

-  中文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=71817)


--  作者:like2009
--  发布时间:2/9/2009 1:02:00 PM

--  递归循环处理关键字的问题,新手请教!
用的动易系统。想读取所显示文章的关键字字段值,这个字段值不固定,是用|符号分割的,我的意图是将每个关键字提取出来,构造一个字符串供sq like查询,然后列出包含关键字的其他文章。
从网上找了一些xslt递归循环的例子,调试没有成功,最后形成如下代码:
参数:没有加入一个数值参数,用于控制循环结束。
使用一个字符串变量strkeywords,将取得的关键字给strkeywords,然后用substring-before和substring-after进行截取,当strkeywords不包含|字符时,就执行otherwise,跳出循环。

下面的代码有什么问题?新手请教!

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pe="labelproc" exclude-result-prefixes="pe">
<xsl:output method="html" />
<xsl:param name="strkeywords"><xsl:value-of select="Keyword"/></xsl:param>
<xsl:template name="temp" match="/NewDataSet/Table">
<xsl:choose>
  <xsl:when test="contains($strkeywords,'|')">
   <xsl:value-of select="substring-before($strkeywords,'|')"/>
   <xsl:call-template name="temp">
    <xsl:with-param name="strkeywords" select="substring-after($strkeywords,'|')"/>
   </xsl:call-template>
  </xsl:when>
  <xsl:otherwise>
   <xsl:value-of select="$strkeywords"/>
  </xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:transform>


--  作者:Qr
--  发布时间:2/9/2009 3:22:00 PM

--  
思路是对的,且代码也没有太大问题,但就是以下一行
<xsl:template name="temp" match="/NewDataSet/Table">
没有match就好理解,如果有match,match的作用是什么?


--  作者:hexun831012
--  发布时间:2/12/2009 9:08:00 PM

--  
与QR不同,我个人觉得思路大大的不对,楼主的逻辑是循环而不是匹配,
<xsl:template match="Keyword">
  <xsl:apply-templates select="Keyword"/>
</xsl:template>
对XSL来说,递归简直是太轻松了
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
7,304.688ms