Вы должны знать и помнить одну самую важную вещь: правило идентификации .
Вот очень простое и компактное решение, использующее самый фундаментальный шаблон проектирования XSLT: использование и переопределение правила идентификации:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/*[1]">
<someNewElement/>
<xsl:call-template name="identity"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному XML-документу, получается требуемый результат :
<XmlFile>
<!-- insert another <tag> element here -->
<someNewElement />
<tag>
<innerTag>
</innerTag>
</tag>
<tag>
<innerTag>
</innerTag>
</tag>
<tag>
<innerTag>
</innerTag>
</tag>
</XmlFile>