[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] conditional display of content


Subject: Re: [xsl] conditional display of content
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Tue, 27 May 2008 10:12:07 +0100

2008/5/27 Ganesh Babu N <nbabuganesh@xxxxxxxxx>:
> This is the XML file:

horrible sample XML fragment by the way... what's wrong with indenting it?

> My requirement is to display the corresponding the role/personname in
> the speaker tag. The condition is id and href should match.
>
> <xsl:template match="pbl:roleref>
>      <xsl:if test="substring-after(@href),#) =
> //pbl:castmember/pbl:role/@xml:id">
>            <xsl:value-of select="//pbl:castmember/pbl:role/personname"/>
>      </xsl:if>
> </xsl:template>

Your xpath needs to at least be //pbl:castmember/pbl:role[$id =
@xml:id]/personname

where $id is a variable defined before the select as:

substring-after(@href), '#')    (notice the single quotes around the
hash... or "pound" sign if you speak American)

or just use substring-after(current()/@href), '#') directly in the XPath.

Ultimately though this should be rewritten to use a key:

<xsl:key name="role-by-id" match="pbl:role" use="@xml:id"/>

and then just

<xsl:template match="pbl:roleref>
  <xsl:value-of select="key('role-by-id', substring-after(@href, '#'))"/>

If the lookup value doesn't exist in the key then nothing is returned.

-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/


Current Thread
Keywords