Yes, if you want a constructed element to be in a particular namespace then you have to put it in that namespace, it doesn't default to being in the same namespace as its new parent.
But why are you using xsl:element? If the names are known at compile time then it's much easier to use literal result elements:
<resultsRoot>
<child1/>
<child2/>
<child3/>
</resultsRoot>
with literal result elements, the namespace is inherited from a containing element *in the stylesheet* - which isn't necessarily the same, of course, as the name of the new parent element *in the result tree*.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference