It seems that when setting the
directive (the 4th item in the !-delimited specification that is the field name alias) to "element", then the 3rd item in that specification is the element name that contains the value, whereas the 3rd item would otherwise be the attribute name that contains the value. In both cases the 1st item in the specification is the element that contains either the attribute or the sub-element. Hence, leaving it blank in
[MyElement!1!!element] gave it no name for the child elements.
Instead, fill out the 3rd item so that the specification looks like:
And so using the following query:
SELECT TAG,PARENT, col1 AS [Parent!1!MyElement!element],
col2 AS [Parent!1!MyElement!element],
col3 AS [Parent!1!MyElement!element]
FOR XML EXPLICIT
Please note that you must fill out the 1st item in the specification, which means you cannot get this list without having a parent element.
Please also see the MSDN page for Example: Specifying the ELEMENT Directive.