如何检查xsl中的字符串长度,如果没有达到目标长度则意味着需要替换为空格

时间:2011-05-04 09:06:10

标签: xslt xslt-2.0

每个人都

<Table>
    <COSTUMER_NAME>praveen</COSTUMER_NAME>
</Table>

praveen(字符串长度)= 7

我们不知道 COSTUMER_NAME 的字符串长度有时可能小于35 或者它确实 35

如果字符串长度小于35,则我们需要替换为剩余字符串长度部分以外的空格

输出:如果我收到字符串 praveen

字符串长度为“ 7

所以剩下的28个字符应该替换为空格

2 个答案:

答案 0 :(得分:1)

我认为应该这样做:

<xsl:template match="/">
    <xsl:variable name="CUSTOMER_NAME">thestring</xsl:variable>
    <xsl:value-of 
         select="substring(
                    concat(
                       $CUSTOMER_NAME,
                       '                                   '
                    ),
                    1,
                    35
                 )"/>
</xsl:template>

其中有35个空格字符作为concat函数的参数。所以它连接你的字符串和35个空格字符,然后从前35个字符中获取一个子字符串,这样就会丢失额外的空格

答案 1 :(得分:0)

XSLT 2.0解决方案

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:my="my:my" >
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  '<xsl:sequence select=
   "my:pad(/*/*, 35, ' ')"/>'
 </xsl:template>

 <xsl:function name="my:pad" as="xs:string">
  <xsl:param name="pString" as="xs:string"/>
  <xsl:param name="pLength" as="xs:integer"/>
  <xsl:param name="pPadChar" as="xs:string"/>

  <xsl:sequence select=
   "concat($pString,
           string-join(
                   for $i in 1 to $pLength - string-length($pString)
                    return $pPadChar
                    ,
                    ''
                    )
           )
   "/>
 </xsl:function>
</xsl:stylesheet>

应用于提供的XML文档

<Table>
    <COSTUMER_NAME>praveen</COSTUMER_NAME>
</Table>

生成了想要的结果

  'praveen                            '

请注意

    使用
  1. <xsl:function> ,这可确保完全重复使用。

  2. 完整参数化为我们提供了最常用,最适用且最可重复使用的解决方案。

  3. 此类函数几乎可以在XQuery中以相同的方式定义,也可以在纯XPath 3.0中定义为函数项。