I am attempting to apply an XSLT transformation to a batch of XML documents. The main point of the transform is to re-order several elements. I wish to preserve any comments tha
I think the best way of putting it would be as follows:
I want the preciding comments but only those with the current node as the first element to follow them.
Then, in xpath1.0/xslt1.0:
<xsl:template match="element">
<xsl:copy-of select="preceding-sibling::comment()[count(following-sibling::*[1]|current()) = 1]"/>
</xsl:template>
<xsl:template match="element">
<xsl:copy-of select="preceding-sibling::comment()[
generate-id(following-sibling::*[1]) = generate-id(current())
]"/>
</xsl:template>
More efficient:
<xsl:key
name = "kPrecedingComment"
match = "comment()"
use = "generate-id(following-sibling::*[1])"
/>
<!-- ... -->
<xsl:template match="element">
<xsl:copy-of select="key('kPrecedingComment', generate-id())" />
</xsl:template>