XSLT:如何匹配元素中的确切文本值并替换

XSLT: how to match exact text value within an element and replace

我需要在文档中找到特定的文本值,'method'并且对于每个实例,将该文本值 'method' 替换为以下内容:

element to replace method

这个 'method' 值可以在整个文档中出现多次。问题是我还需要保留元素中的剩余文本,除了 'method' 将被替换。

      <section id="1">
        <title>Methods</title>
            <p>The test method blah has 6 types of methods available</p>
            <p>With the exception of a specific method<p
        </section>
     <section id="2">
        <title>Organisations</title>
            <p>The organisation has a method</p>
        </section>

我不确定使用 fn:replace 是否是最好的方法,以及我是否还需要使用正则表达式(我目前不熟悉的东西)。任何关于此处方法的建议将不胜感激。

预期输出仅将确切的文本 'method' 替换为内容元素,但保留 'methods':

<section id="1">
   <title>Methods</title>
   <p>The test <content type="description" xlink:href="linktodescription">method</named-content> blah has 6 types of methods available</p>
</section>     
<section id="2">
  <title>Organisations</title>
  <p>The organisation has a <content type="description" xlink:href="linktodescription">method</named-content></p>
</section>

假设 Saxon 9 作为您可以使用的 XSLT 处理器(基于 http://saxonica.com/html/documentation/xsl-elements/analyze-string.html

<xsl:template match="section/p">
  <xsl:copy>
    <xsl:analyze-string select="." regex="\bmethod\b" flags=";j">
        <xsl:matching-substring>
            <content type="description" xlink:href="linktodescription">
                <xsl:value-of select="."/>
            </content>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:value-of select="."/>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:copy>
</xsl:template>