<Document>
<Legend>
<TypeDesc Type="PP" Id="1" PKey="ZZ" xml:lang="EN" ShDes="ZZ"
LongDes="ZO Contracts"/>
</Legend>
</Document>
Requirement: To find LongDes
Exising XSL file:
<xsl:call-template name="getLegend">
<xsl:with-param name="cat" select="'PP'"/>
<xsl:with-param name="key" select="'ZZ'"/>
</xsl:call-template>
<xsl:template name="getLegend">
<xsl:param name="cat"/>
<xsl:param name="key"/>
<xsl:call-template name="lookup">
<xsl:with-param name="index" select="'legendIndex'"/>
<xsl:with-param name="key"
select="concat($cat,'_',$key)"/>
<xsl:with-param name="doc" select="$legend"/>
<xsl:with-param name="expr" select="'@LongDes'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="lookup">
<!-- index name, i.e. name of the key -->
<xsl:param name="index"/>
<xsl:param name="key"/>
<!-- default value -->
<xsl:param name="default" select="''"/>
<!-- node in index source document, per default default value
-->
<xsl:param name="doc" select="$default"/>
<!--expr to evaluate to return value, per default result node
-->
<xsl:param name="expr" select="'.'"/>
<!-- force context to document where the lookup table is -->
<xsl:for-each select="$doc[1]">
<xsl:variable name="result" select="key($index,$key)"/>
<xsl:choose>
<xsl:when test="$result">
<xsl:value-of
select="xalan:evaluate(concat('$result[1]/',$expr))"/>
</xsl:when>
<xsl:when test="$default">
<xsl:value-of select="$default"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>