需要替换标记xsl中的文本



输入:

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

XSL应取代

"##B2B##abc,控件,自由文本##B2B##"

在带有的Remarks标签中

"value1:abc,value2:控件,value3:自由文本"

期望输出:

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

以下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>

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

相关内容

  • 没有找到相关文章