XSLT技术问题:如何将XML多实例Ustrd返回值限制为18字符
问题描述
我现在用以下XSLT代码把多个a:RmtInf/a:Ustrd实例合并为一个<Ustrd>节点:
<Ustrd> <xsl:value-of select="a:RmtInf/a:Ustrd"/> </Ustrd>
这段代码的返回结果是:
<Ustrd>Item-1 Item-2 Item-3</Ustrd>
现在需要把返回的字符串限制为18个字符,但直接用substring函数处理序列不行,我尝试了下面的代码但没达到预期:
<Ustrd> <xsl:value-of select="substring(a:RmtInf/a:Ustrd, 1, 18"/> </Ustrd>
期望得到的结果是:
<Ustrd>Item-1 Item-2 Item</Ustrd>
解决方案
问题出在substring函数接收的是节点序列,而非合并后的完整字符串。xsl:value-of默认会把序列节点值用空格拼接,但直接给substring传序列,它只会处理序列的第一个节点值,不是合并后的整体。
正确做法是先把所有a:RmtInf/a:Ustrd的节点值拼接成字符串,再对这个字符串做截断。用string-join函数手动完成拼接(和xsl:value-of默认行为一致,以空格分隔),再嵌套substring即可:
<Ustrd> <xsl:value-of select="substring(string-join(a:RmtInf/a:Ustrd, ' '), 1, 18)"/> </Ustrd>
这样就能得到你期望的截断到18字符的结果。
内容的提问来源于stack exchange,提问作者EEAAO
相关产品推荐
相关产品推荐

