需要替换tag-xsl中的文本

时间:2016-04-14 07:36:39

标签: xslt xslt-1.0

输入:

<Remarks>Random data## B2B## abc,controls,free text ## B2B## random data</Remarks>

XSL应该替换

  

&#34; ## B2B ## abc,控件,自由文本## B2B ##&#34;

带有

Remarks标记中的

  

&#34; value1:abc,value2:controls,value3:free text&#34;

期望的输出:

<Remarks>Random data,value1:abc,value2:controls,value3:free text,random data</Remarks>

1 个答案:

答案 0 :(得分:0)

以下XSLT执行预期的替换:

<xsl:template match="Remarks">
  <Remarks><xsl:value-of select="concat(normalize-space(substring-before(text(),'## B2B## abc,controls,free text ## B2B##')),',value1:abc,value2:controls,value3:free text,',normalize-space(substring-after(text(),'## B2B## abc,controls,free text ## B2B##')))" /></Remarks>
</xsl:template>

<强>输出:

<Remarks>Random data,value1:abc,value2:controls,value3:free text,random data</Remarks>

或者,为了使其更通用,请为字符串使用变量:

<xsl:template match="/lines/Remarks">
  <xsl:variable name="str2Replace" select="'## B2B## abc,controls,free text ## B2B##'" />
  <xsl:variable name="replacement" select="',value1:abc,value2:controls,value3:free text,'" />
  <Remarks><xsl:value-of select="concat(normalize-space(substring-before(text(),$str2Replace)),$replacement,normalize-space(substring-after(text(),$str2Replace)))" /></Remarks>
</xsl:template>

更为一般:

<xsl:template match="/lines/Remarks">
  <xsl:call-template name="strReplace">
    <xsl:with-param name="str2Replace" select="'## B2B## abc,controls,free text ## B2B##'" />
    <xsl:with-param name="replacement" select="',value1:abc,value2:controls,value3:free text,'" />
    <xsl:with-param name="onElement" select="'Remarks'" />
  </xsl:call-template>
</xsl:template>

<xsl:template name="strReplace">
  <xsl:param name="str2Replace" />
  <xsl:param name="replacement" />
  <xsl:param name="onElement" />
  <xsl:element name="{$onElement}">
    <xsl:value-of select="concat(normalize-space(substring-before(text(),$str2Replace)),$replacement,normalize-space(substring-after(text(),$str2Replace)))" />
  </xsl:element>
</xsl:template>

因此,您可以在调用模板中使用不同的值。