Tuesday, December 19, 2006, 2:27:52 AM, you wrote:
HDL> Assume that my document has this structure:
HDL> <topLevel>
HDL> <ents>
HDL> <ent name="abc"><value>test1</value></ent>
HDL> <ent name="def"><value>test2</value></ent>
HDL> </ents>
HDL> .
HDL> .
HDL> .
HDL> <para>This is a <entRef name="def"/>.</para>
HDL> What XPath expression can I use in context of this <entRef> element to
HDL> reference the content of the <value> element that matches the <ent> name
HDL> attribute (as shown above). I've gotten this far:
HDL> /topLevel/ents/ent[(_at_)name]/value
HDL> But, that always returns the first value. Somehow I need to test @name
HDL> that equals the "name" of the current tag.
I think that problem is not in XPath but in templates. I suppose
something like that will suit for you:
<xsl:key name="ents-by-name" use="@name" match="//ents/ent"/>
<xsl:template match="topLevel">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1251"/>
<title>test</title>
</head>
<body>
<xsl:apply-templates select="page"/>
</body>
</html>
</xsl:template>
<xsl:template match="para">
<p><xsl:apply-templates select="@*|node()"/></p>
</xsl:template>
<xsl:template match="entRef">
<xsl:variable name="ent-name" select="key('ents-by-name', @name)"/>
<b>
<xsl:choose>
<xsl:when test="$ent-name">
<xsl:value-of select="$ent-name"/>
</xsl:when>
<xsl:otherwise>
<xsl:text/>Undefined ent
</xsl:otherwise>
</xsl:choose>
</b>
</xsl:template>
--
Alexey
mailto:alexey(_dot_)nikolaenkov(_at_)actimind(_dot_)com
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--