Есть вот такой XML
<a>
Пример текста, пример текста, пример текста, пример текста.
<b>
Вот еще немного текста, вложенного в другой тег.
</b>
</a>
Задача такая, нужно символ "," заменить везде на "<c/>,"
Использовал шаблон для замены текста из книги Валикова, но ничего хорошего не вышло.
Дело в том, что у меня в символ запятой встречается во вложенном теге,
а функция substring-before убирает все теги в переданной ей строке.
<xsl:template name="replace" match="@*|node()" mode="replace">
<xsl:param name="str">
<xsl:copy-of select="."/>
</xsl:param>
<xsl:param name="search-for" select="','"/>
<xsl:param name="replace-with">
<xsl:element name="c"/>
</xsl:param>
<xsl:choose>
<xsl:when test="contains($str, $search-for)">
<xsl:copy-of select="substring-before($str, $search-for)"/>
<xsl:copy-of select="$replace-with"/>
<xsl:call-template name="replace">
<xsl:with-param name="str" select="substring-after($str, $search-for)"/>
<xsl:with-param name="search-for" select="$search-for"/>
<xsl:with-param name="replace-with" select="$replace-with"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="item">
<xsl:with-param name="item" select="$str"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="item">
<xsl:param name="item"/>
<xsl:param name="delimeter"/>
<xsl:copy-of select="$item"/>
<xsl:copy-of select="$delimeter"/>
</xsl:template>