首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换XSLT中的XML值

替换XSLT中的XML值
EN

Stack Overflow用户
提问于 2009-06-16 21:16:45
回答 3查看 3.1K关注 0票数 0

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

代码语言:javascript
复制
<xsl:value-of select="Name" disable-output-escaping="yes"/>

XML数据的值是"Northfield Bancorp Inc.(MHC)",我想用"Northfield Bancorp Inc." (remove "MHC")替换它。

XSLT中有没有可以搜索和替换this的函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-17 08:52:28

如果只是要删除字符串末尾的"(MHC)“,则如下所示:

代码语言:javascript
复制
<xsl:value-of select="
  substring-before(
    concat(Name, '(MHC)'), 
    '(MHC)'
  )
" />

如果你想要动态替换,你可以写一个这样的函数:

代码语言:javascript
复制
<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>

它可以像下面这样调用:

代码语言:javascript
复制
<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>
票数 5
EN

Stack Overflow用户

发布于 2009-06-16 21:24:39

XSLT 2.0有一个replace()函数。

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

http://prdownloads.sourceforge.net/xsltsl/xsltsl-1.2.1.zip http://xsltsl.sourceforge.net/string.html#template.str:subst

票数 1
EN

Stack Overflow用户

发布于 2009-06-16 21:36:53

来自exslt.org的另一个XSLT1.0模板

http://www.exslt.org/str/functions/replace/str.replace.template.xsl

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1003981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档