Come on. With XSLT you write a rule and then write a fragment of the resulting document.
<xsl:template match="abc">
<def ghi="jkl"/>
</xsl:template>
This is one of simplest ways to do things. With JavaScript you what? Call methods? CreateElement("def").setAttribute("def", "jkl")
There is a ton of "template engines" (all strictly worse than XSLT); why people keep writing them? Why people invented JSX with all the complicated machinery if plain JavaScript is better?