Я не думаю, что это можно сделать за один шаг в XSLT.
Ваш единственный шанс - извлечь строку документа, разобрать ее в отдельный XML-документ и извлечь из нее.
В качестве альтернативного решения вы можете написать следующее преобразование:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="FIELD[@NAME='xmlstring']">
<xsl:copy>
<xsl:copy-of select="@*" />
<!-- now this is somewhat brittle, I would not really recommend
it for production use, but maybe it helps nevertheless -->
<xsl:choose>
<xsl:when test="contains(., '<?xml')">
<xsl:value-of select="substring-after(., '?>')" disable-output-escaping="yes" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
, который производит:
<HIT>
<FIELD NAME="xmlstring">
<kontaktpersoner>
<person>
<funksjon><![CDATA[Økonomi]]></funksjon>
<tittel><![CDATA[regnskapsansv.]]></tittel>
<email><![CDATA[test@test.no]]></email>
<navn><![CDATA[Test Test]]></navn>
</person>
<person>
<funksjon><![CDATA[Leder]]></funksjon>
<tittel><![CDATA[adm. dir.]]></tittel>
<email><![CDATA[test2@test.no]]></email>
<navn><![CDATA[Test2 Test]]></navn>
</person>
</kontaktpersoner>
</FIELD>
</HIT>
Который затем можно использовать как обычный документ XML на втором шаге.