Замена значения XML в XSLT - PullRequest
0 голосов
/ 17 июня 2009

Я не могу редактировать XML, я просто хочу изменить данные XML в файле XSLT.

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

Значение данных XML - "Northfield Bancorp Inc.(MHC)", и я хочу заменить его на "Northfield Bancorp Inc." (удалить "MHC").

Есть ли какая-либо функция, доступная в XSLT, которая может искать и заменять эту?

Ответы [ 3 ]

5 голосов
/ 17 июня 2009

Если это просто "(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>
1 голос
/ 17 июня 2009

другой шаблон xslt 1.0 от exslt.org

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

1 голос
/ 17 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...