Удалить нецифровые символы из телефонного номера

Телефонный номер заносится в базу в человекопонятном формате с пробелами и скобками. Чтобы сделать номер ссылкой требуется передать его в параметр href ссылки как сплошную последовательность цифр. Как это сделать на xslt?

Исходный номер хранится в настройках сайта (пример для UMI.CMS).

Для начала создать шаблон, который будет удалять все лишнее:

<xsl:template name="strip-phone">
	<xsl:param name="phone" />
	<xsl:variable name="vnumsOnly" select="translate($phone, translate($phone,'+0123456789',''), '')"/>
	<xsl:value-of select="substring($vnumsOnly, (substring($vnumsOnly,1,1)='1') +1)"/>
</xsl:template>

Здесь в параметр phone будет передаваться обрабатываемый номер.

Функция translate  сперва удалит из значения узла все символы, кроме +0123456789, а затем то, осталось, удалит из исходного значения узла. В итоге получаем номер, в котором содержатся только перечисленные символы +0123456789.

Вызов в шаблоне:

<a>
	<xsl:attribute name="href">
		<xsl:text>tel:</xsl:text>
		<xsl:call-template name="strip-phone">
			<xsl:with-param name="phone" select="$conf//property[@name='sales_phone']/value" />
		</xsl:call-template>
	</xsl:attribute>
	<xsl:value-of select="$conf//property[@name='sales_phone']/value" />
</a>

Примечание:

Здесь $conf - это узел настроек сайта (для UMI.CMS)

<xsl:variable name="confId" select="document('udata://umiSettings/getIdByCustomId/spf-ru/')/udata"/>
<xsl:variable name="conf" select="document(concat('uobject://', $confId))/udata"/>