[xsl] ancestor-or-self and text nodes

Subject: [xsl] ancestor-or-self and text nodes
From: Kenneth Stephen <marvin.the.cynical.robot@xxxxxxxxx>
Date: Thu, 11 Aug 2005 15:53:05 -0500
Hi,

    I have the following testcase :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    version="1.0"
	xmlns:exsl-common="http://exslt.org/common";
	extension-element-prefixes="exsl-common">

	<xsl:variable name="rtf">
		<a>
			<b>
				<c>some text</c>
			</b>
			<d>
				<e>more text</e>
			</d>
		</a>
	</xsl:variable>

	<xsl:template match="/">
		<xsl:apply-templates select="exsl-common:node-set($rtf)/*" />
	</xsl:template>

	<xsl:template match="node()[not(ancestor-or-self::b)]">
		<xsl:copy>
			<xsl:apply-templates select="node()" />
		</xsl:copy>
	</xsl:template>

</xsl:stylesheet>

    This produces the following output :

<?xml version="1.0" encoding="utf-8"?><a>some text<d><e>more text</e></d></a>

    Why is it that "some text" appears in the output? Surely "b" is an
ancestor of the text node "some text"?

Thanks,
Kenneth

Current Thread