在XSLT中替换XML值

在XSLT中替换XML值,xslt,Xslt,我不能编辑XML,我只想更改XSLT文件中的XML数据 <xsl:value-of select="Name" disable-output-escaping="yes"/> XML数据的值是“Northfield Bancorp Inc.(MHC)”,我想用“Northfield Bancorp Inc.”(删除“MHC”)替换它 XSLT中是否有可用的函数可以搜索和替换此文件?XSLT 2.0有一个replace()函数 如果您坚持使用1.0,标准库中有一个模板可以替代缺少

我不能编辑XML,我只想更改XSLT文件中的XML数据

<xsl:value-of select="Name" disable-output-escaping="yes"/>

XML数据的值是
“Northfield Bancorp Inc.(MHC)”
,我想用
“Northfield Bancorp Inc.”
(删除
“MHC”
)替换它

XSLT中是否有可用的函数可以搜索和替换此文件?

XSLT 2.0有一个replace()函数

如果您坚持使用1.0,标准库中有一个模板可以替代缺少本机函数的模板:


另一个来自exslt.org的xslt 1.0模板

如果只是要删除字符串末尾的“(MHC)”,则可以执行以下操作:

<xsl:value-of select="
  substring-before(
    concat(Name, '(MHC)'), 
    '(MHC)'
  )
" />

如果要动态替换,可以编写如下函数:

<xsl:template name="string-replace">
  <xsl:param name="subject"     select="''" />
  <xsl:param name="search"      select="''" />
  <xsl:param name="replacement" select="''" />
  <xsl:param name="global"      select="false()" />

  <xsl:choose>
    <xsl:when test="contains($subject, $search)">
      <xsl:value-of select="substring-before($subject, $search)" />
      <xsl:value-of select="$replacement" />
      <xsl:variable name="rest" select="substring-after($subject, $search)" />
      <xsl:choose>
        <xsl:when test="$global">
          <xsl:call-template name="string-replace">
            <xsl:with-param name="subject"     select="$rest" />
            <xsl:with-param name="search"      select="$search" />
            <xsl:with-param name="replacement" select="$replacement" />
            <xsl:with-param name="global"      select="$global" />
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$rest" />
        </xsl:otherwise>
      </xsl:choose>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$subject" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

可调用为:

<xsl:call-template name="string-replace">
  <xsl:with-param name="subject"     select="Name" />
  <xsl:with-param name="search"      select="'(MHC)'" />
  <xsl:with-param name="replacement" select="''" />
  <xsl:with-param name="global"      select="true()" />
</xsl:call-template>

您可能必须查看源代码才能看到这一点。