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

发布于 2024-11-04 16:04:16 字数 438 浏览 0 评论 0原文

hii every body

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

praveen(字符串长度)= 7

我们不知道 COSTUMER_NAME 的字符串长度,有时它可能小于 35 或者它恰好是 35

如果字符串长度小于 35 那么我们需要替换为空格而不是剩余的字符串长度部分

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

字符串长度为“7

因此剩余的 28 个字符应替换为空格

hii every body

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

praveen (string length) = 7

we dont know the string length of COSTUMER_NAME some times it may be less than 35
or it was be exactly 35

if the string length was less than be 35 then we need replace as space other than remaining string length part

Output: if i hv recieved string as praveen

string length was "7"

so then remaining 28 character should be replaced as space

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

卸妝后依然美 2024-11-11 16:04:16

我认为应该这样做:

<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 个字符的子字符串,因此多余的空格会丢失

I think this should do it:

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

There are 35 white space characters there as the argument to the concat function. So it concatenates your string and 35 space characters, then takes a substring from it of the first 35 characters, so extra whitespace is lost

無心 2024-11-11 16:04:16

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. <使用 p>,这确保了完全的可重用性。

  2. 完全参数化为我们提供了最通用、最适用、最可复用的解决方案。

  3. 这样的函数几乎可以用同样的方式定义,在 XQuery 中或者作为纯 XPath 3.0 中的函数项。

XSLT 2.0 solution:

<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>

when applied on the provided XML document:

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

the wanted result is produced:

  'praveen                            '

Do note:

  1. <xsl:function> is used and this ensures complete reusability.

  2. Complete parameterization gives us the most general, most applicable and most reusable solution.

  3. Such function can be defined almost exactly in the same way in XQuery or as a function item in pure XPath 3.0.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文