Responding to your comment on @Dimitre's answer...
You wrote,
<xsl:template match="/">
<xsl:for-each select="elem/file">
<xsl:result-document method="xml" href="file_{@id}-output.xml">
<xsl:copy-of select="."/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
This doesn't quite match your XML, which has rootelem
as an outermost element, and your comment says root
as an outermost element. You probably want something like this:
<xsl:template match="/root">
<xsl:for-each select="elem/file">
<xsl:result-document method="xml" href="file_{@id}-output.xml">
<root>
<xsl:copy-of select="/root/@*" />
<elem>
<xsl:copy-of select="../@* | ." />
</elem>
</root>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
You could get fancier, trying to use <xsl:copy>
instead of literal result elements for root and elem, but it doesn't seem worth the effort unless they're going to vary.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…