<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
<xsl:template match="/">
<xsl:for-each select="//b">
<xsl:variable name="dst"
select="id(/root/c/c1[(_at_)role='src'][(_at_)target=current()/@id]/../c1[(_at_)role='dst']/@target)"/>
<xsl:choose>
<xsl:when test="$dst and count($dst/..|../..)=1">
matched <xsl:value-of select="@id"/>
<xsl:text/> (uncle is <xsl:value-of select="$dst/@id"/>)<xsl:text/>
</xsl:when>
<xsl:otherwise>
not matched <xsl:value-of select="@id"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
produces
$ saxon b.xml b.xsl
<?xml version="1.0" encoding="utf-8"?>
not matched _10
matched _11 (uncle is _10)
not matched _12
which is I think what you want.
David
________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list