Converting node to string with XSLT
If you simply write:
<xsl:value-of select="//some-element"/>
you get just a string of it's internal text elements, no node names. It's naked.
If you write:
<xsl:copy-of select="//some-element"/>
You get just the copy of everything.
You can convert an element to string in a following way:
<xsl:variable name="full-string">
<xsl:apply-templates select="//some-element" mode="serialize"/>
</xsl:variable>
For that to work, define two new templates:
<xsl:template match="*" mode="serialize">
<xsl:text><</xsl:text><xsl:value-of select="name(.)"/>
<xsl:text>></xsl:text>
<xsl:apply-templates mode="serialize"/>
<xsl:text></</xsl:text><xsl:value-of select="name(.)"/>
<xsl:text>></xsl:text>
</xsl:template>
<xsl:template match="text()" mode="serialize">
<xsl:value-of select="."/>
</xsl:template>