RE: [xsl] Testing node immediately following in mixed content

Subject: RE: [xsl] Testing node immediately following in mixed content
From: Ryan Graham <Ryan.Graham@xxxxxxxxxxxxx>
Date: Tue, 18 May 2004 15:15:07 -0700
Thanks for the help Michael.  It was the whitespace-only nodes that were
causing the problem.  I couldn't get your xPath below to work, so I changed
my attack:

preceding-sibling::node()[1][self:xref]

Combined with

<xsl:strip-space elements="para"/>

Did the trick.

Thanks again!
-RG

-----Original Message-----
From: Michael Kay [mailto:mhk@xxxxxxxxx] 
Sent: Friday, May 14, 2004 4:01 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: [xsl] Testing node immediately following in mixed content


The following-sibling::node() after your xref is a whitespace-only text
node. You need something like 

following-sibling::node()[not (self::text() and
normalize-space(.)][1][self::xref]

And if you think it's late on a Friday, it's early on Saturday here.

Michael Kay 

> -----Original Message-----
> From: Ryan Graham [mailto:Ryan.Graham@xxxxxxxxxxxxx]
> Sent: 14 May 2004 22:21
> To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
> Subject: [xsl] Testing node immediately following in mixed content
> 
> Hi all,
> 
> It may be that it is late Friday, but for the life of me, I
> cannot seem to
> get the following template to output a comma when the node immediately
> following the context node is a certain type.  Maybe my XPath 
> is wrong?
> 
> I basically want to split "back-to-back" xref's with a comma
> (simulating
> multiple footnote references). My output is HTML.
> 
> Sample xml (that needs comma seperation):
> 
> <para>Some filler text
> 	<xref linkend="burnc01-note-0001"/>
> 	<xref linkend="burnc01-note-0002"/>
> completing the paragraph.</para>
> 
> Sample xml (that doesn't need a comma added)
> 
> <para>Some filler text
> 	<xref linkend="burnc02-note-0006"/> 
> 	some more filler text	
> 	<xref linkend="burnc02-note-0007"/>
> </para>
> 
> Stylesheet snippet:
> 
> <xsl:template match="para">
> 	<p>
> 		<xsl:apply-templates/>
> 	</p>
> </xsl:template>
> 
> <xsl:template match="xref">
> 	<a href="{concat('#',@linkend)}"><sup><xsl:value-of
> select="number(substring-after(@linkend,'note-'))"/></sup></a>
> 	<xsl:if test="name(following-sibling::node()[1]) = 'xref'">
> 		<sup>,</sup>
> 	</xsl:if>
> </xsl:template>
> 
> XmlSpy's xPath evaluator tells me that this is sound logic,
> but using Saxon,
> I can't get the comma in the output.
> 
> Thanks,
> Ryan

Current Thread