Я не могу воспроизвести сообщенную проблему .
Когда я выполняю это преобразование, используя Saxon 9.1.05 и XQSharp:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<div id="{replace('location','l','t')}"/>
</xsl:template>
</xsl:stylesheet>
для любого XML-документа (не используется) результат в обоих случаях является ожидаемым, правильным :
<div xmlns:xs="http://www.w3.org/2001/XMLSchema" id="tocation"/>
Это означает, что вы используете несовместимый / глючный XSLT 2.0процессор .
Свяжитесь с поставщиком и сообщите об ошибке.
Если вы используете процессор XSLT 1.0 , вам нужно написать рекурсивный именованный шаблонсделать простую замену (не используя RegExes).В теге "xslt" есть несколько хороших примеров, которые можно найти в ответах на подобные вопросы.
Однако конкретное изменение, которое вы хотите выполнить, может быть сделано еще проще:
<div id="{translate('location','l','t')}"/>