Often you may wish to extract a portion of an XML file including all of its children elements so as to better deal with it or further transform or handle it elsewhere.
For example, in web-service-based development, it is common for a developer to “extract” the payload from a request or response envelope. This can also be in situations where a NIEM developer wishes to obtain the payload portion of a LEXS package and further process, store or display it.
With XSLT, it only takes the following few lines of code to pull a branch of XML out of a larger package.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/uml">
<xsl:apply-templates select="XMI" mode="RecursiveDeepCopy" />
</xsl:template>
<xsl:template match="@*|node()" mode="RecursiveDeepCopy">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates mode="RecursiveDeepCopy" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
In the above example, the XMI/* elements and attributes are being extracted from the /uml/ container element. Before the transform, the XML would look something like this:
<uml>
<XMI>
<XMI.header/>
<XMI.content/>
</XMI>
</uml>
And after it would look like this:
<XMI>
<XMI.header/>
<XMI.content/>
</XMI>
For information on similar transforms, simply Google or Bing "Identity transforms."