Причина, по которой он ошибается, в том, что он больше не является допустимым XML.
Чтобы сделать то, что вы пытаетесь сделать:
<xsl:when test="title">
<div id="{title}">
<xsl:value-of select="title"/>
</div>
</xsl:when>
Вы можете поместить любой вид селектора внутритеги {} или даже ссылочные переменные, если у вас есть что-то сложное.
<xsl:variable name="some_complex_variable">
<xsl:value-of select="title"/>
</xsl:variable>
<xsl:when test="title">
<div id="{$some_complex_variable}">
<xsl:value-of select="title"/>
</div>
</xsl:when>
Третий, многословный способ сделать это - динамически присоединить атрибут с помощью xsl: attribute:
<xsl:when test="title">
<div>
<xsl:attribute name="id" select="title"/>
</div>
</xsl:when>