以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  求助:xslt段落截取  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=87902)


--  作者:shmiya
--  发布时间:11/24/2010 10:29:00 AM

--  求助:xslt段落截取
<article>
    <text>aaa</text>
    <text>bbb</text>
    ...
</article>

我想通过xslt来截取出article里的内容,只显示出500个字符。
每个text里的值长度不定。
这样的需求可以通过xslt实现吗?谢谢。

ps:更复杂的情况是,text标签里还有其他标签。。当然这个暂时先不考虑了。


--  作者:Qr
--  发布时间:11/24/2010 12:51:00 PM

--  
string-legth()可以判断字符长度。通过命名模板来传递两个参数用于计数就可以了。
--  作者:shmiya
--  发布时间:11/24/2010 4:39:00 PM

--  
能不能给一个简单的例子,不是很明白:)
--  作者:Qr
--  发布时间:11/24/2010 4:57:00 PM

--  
命名模板是XSL中最难掌握的一部分,这方面太麻烦,最近太忙,没心情也没时间调试,简单写个格式给你吧。
<xsl:template match="/">
    <xsl:call-template name="template">
        <xsl:with-param name="cnt" select="0" />
        <xsl:with-param name="len" select="string-legth(.)" />
    </xsl:call-template>
</xsl:template>

<xsl:template name="template">
    <xsl:param name="cnt"/>
    <xsl:param name="len"/>
此处写逻辑代码,处理文本并计算累计值
</xsl:template>
cnt记录文本累计长度,len记录当前text的长度,然后再在模板template中根据长度组合输出文本并计算累计值等。


--  作者:shmiya
--  发布时间:11/24/2010 5:46:00 PM

--  
好的,谢谢啊
我去试一下,最近做项目用到xslt,之前一点都没学过,所以遇到点困难。
非常感谢:)
--  作者:shmiya
--  发布时间:11/25/2010 11:40:00 AM

--  
我还是没有解决这个问题,原因是我不知道如何将
<text>aa</text>
<text>bb</text>
<text>cc</text>
...
循环进行累加,如何能实现一个递归呢?
我想得到的效果是aa + bb + cc的长度最多只取500个,这样,就需要把三个字符串长度都进行计算,一旦大于500就停止输出。
对于一个aa我用命名模板,实现了一个“递归”,这个递归只是限于aa本身,没有办法作用到bb上去。。
应该是我的方法有问题吧。

<xsl:call-template name="substr">
//如何把所有的text都传到这个函数里去,这个是我遇到最大的问题。   
</xsl:call-template>


--  作者:Qr
--  发布时间:11/25/2010 9:37:00 PM

--  
字符串连接可用concat()。建议你去补一下XPATH,基本的字符串都在XPATH应用,必须掌握的。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
5,886.719ms