Вы должны действительно соответствовать элементу Diagnoses
, в противном случае вы получите что-то для каждого Diagnosis
, что не совсем то, что вы хотите.
Но если вы сделаете это, вы можете получить желаемый результат, сделав это ...
<CodeGroupA>
<xsl:value-of select="if (Diagnosis/Code=$CodeGroupA) then 'Found' else 'Not found'" />
</CodeGroupA>
и аналогично для CodeGroupB
.
Конечно, вы можете избежать повторения логики, поместив логику в функцию. Попробуйте это XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my" version="3.0">
<!-- input/output configuration -->
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:variable name="CodeGroupA" select="'12', '13'" />
<xsl:variable name="CodeGroupB" select="'17', '18'" />
<xsl:template match="/Diagnoses" >
<CodeGroupA>
<xsl:value-of select="my:check(Diagnosis/Code, $CodeGroupA)" />
</CodeGroupA>
<CodeGroupB>
<xsl:value-of select="my:check(Diagnosis/Code, $CodeGroupB)" />
</CodeGroupB>
</xsl:template>
<xsl:function name="my:check">
<xsl:param name="nodes" />
<xsl:param name="group" />
<xsl:value-of select="if ($nodes = $group) then 'Found' else 'Not found'" />
</xsl:function>
</xsl:stylesheet>