This is most likely w3schools being not up to a good standard. If you enter <a><b>four &lt; five</b></a>
you will should get your expected output, although this is not the correct thing to do!
Using <
as the entity is the correct thing to do in the XML. And when the resultant XML gets serialised, it should also be output as <
Try it at xmlplayground.com or xsltransform.net and you will see there is actually no problem with your code at all.
As an aside, if you are intending to show the results in the browser, you should probably add the xsl:output statement to indicate you are outputting HTML. (And to stop the <?xml version="1.0" encoding="utf-8"?>
declaration being output).
<xsl:output method="html" />