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

时间:2017-07-20 10:16:11

标签: xslt textnode

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

element to replace 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是否是最好的方法,如果我还需要使用正则表达式(我目前不熟悉的东西)。对此方法的任何建议将不胜感激。

预期输出仅替换内容元素的确切文本'方法',但保留'方法':

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

1 个答案:

答案 0 :(得分:0)

假设您可以使用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>