У вас есть дополнительный неэкранированный знак "меньше чем" до определения вашей p
переменной:
<<xsl:variable name="p" select="replace($pre,'_','-')"/>
Это недопустимый синтаксис.
Вы должны удалить его:
<xsl:variable name="p" select="replace($pre,'_','-')"/>
Или избежать этого:
<<xsl:variable name="p" select="replace($pre,'_','-')"/>