2

我在 xsl 中有字符串“[test]”。我需要删除 xsl 中的这个括号。我怎样才能在 XSL 中实现这一点。请帮忙。

我知道这可以做到,但我怎样才能用下面的代码删除'[',

   <xsl:call-template name="string-replace-all">
     <xsl:with-param name="text" select="$string" />
     <xsl:with-param name="replace" select="$replace" />
     <xsl:with-param name="by" select="$by" />
   </xsl:call-template>  

请帮忙删除'['和']'

4

3 回答 3

6

使用translate()函数。

例子...

<xsl:call-template name="string-replace-all">
 <xsl:with-param name="text" select="$string" />
 <xsl:value-of select="translate( $text, '[]', '')" />
</xsl:call-template>
于 2012-11-06T06:33:57.237 回答
6

xsl 2.0

replace('[text]','^[(.*)]$','$1')

xsl 1.0

translate('[text]','[]','')

或者

substring-before(substring-after('[text]','['),']')

这些中的任何一个都可以通过不同的故障模式来满足您的需求。请注意,无论输入是什么,第二个示例都会返回一些内容,但会删除输入中的所有括号。第三个示例仅在具有初始左括号和终止右括号的情况下才返回字符串,否则将返回空序列。

于 2012-11-06T06:36:06.083 回答
1

如果要将一个符号替换为另一个,可以使用 translate 函数(XSLT 1.0、2.0),但如果要替换字符串,可以使用 MSXML 和其他 XSLT 处理器的通用模板:

<xsl:template name="replace-string">
    <xsl:param name="text"/>
    <xsl:param name="replace"/>
    <xsl:param name="with"/>
    <xsl:choose>
      <xsl:when test="contains($text,$replace)">
        <xsl:value-of select="substring-before($text,$replace)"/>
        <xsl:value-of select="$with"/>
        <xsl:call-template name="replace-string">
          <xsl:with-param name="text" select="substring-after($text,$replace)"/>
          <xsl:with-param name="replace" select="$replace"/>
          <xsl:with-param name="with" select="$with"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
      </xsl:otherwise>
    </xsl:choose>
</xsl:template>
于 2014-12-27T14:34:38.353 回答