XSLT: как сопоставить точное текстовое значение внутри элемента и заменить
Мне нужно найти определенное текстовое значение в документе, "метод", и для каждого экземпляра заменить это текстовое значение "метод" следующим:
Это значение метода может появляться в документе несколько раз. Проблема в том, что мне также нужно сохранить оставшийся текст внутри элемента, кроме "метода", который будет заменен.
<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' на элемент содержимого, но сохраняет 'методы':
<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 ответ
Предполагая 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>