|
Subject: Re: [xsl] XPath attribute expression From: Alexey Nickolaenkov <nikolaenkov@xxxxxxxxxxxx> Date: Tue, 19 Dec 2006 10:28:38 +0300 |
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[@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.nikolaenkov@xxxxxxxxxxxx
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] XPath attribute expressio, David Carlisle | Thread | RE: [xsl] XPath attribute expressio, Hintz, David L |
| Re: [xsl] Apache FOP Border, Tony Lavinio | Date | [xsl] key() and document() - scopin, Bryn Lewis |
| Month |