RE: [xsl] determining whether an XPATH points to an element or attribute

Subject: RE: [xsl] determining whether an XPATH points to an element or attribute
From: Edward.Middleton@xxxxxxxxxxx
Date: Thu, 24 Jan 2002 11:48:57 +0900
> <xsl:template match="//tagname1[fads and @fads]/tagname2">
> <xsl:choose>
> <xsl:when test=" self::*"><!-- if it points to element -->
> <TagOperation>
> </xsl:when>
> <xsl:otherwise><!-- if it points to attribute-->
> <AttributeOperation>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>

>With this template only elements with name "tagname2" (and tagname1 as
>parent, which ...) will be processed. So you don't need to test on element
>or attribute.
The match path is an arbitrary XPATH I obtain from another file.  I have to test whether it is an attribute because I
didn't know what

<Path>//tagname1[@fads]</Path>

points to when I generated the above template.  If I could check what it pointed to using XSLT It wouldn't be a problem
This is what I use to generate the above template from the Path element.

<xsl:namespace-alias stylesheet-prefix="pre" result-prefix="xsl"/>
<xsl:template match="Path">
	<pre:template>
		<xsl:attribute name="match"><xsl:value-of select="current()"/></xsl:attribute>
		<pre:choose>
			<!-- is element case -->
			<pre:when test="self::*">
				<elementCase/>
			</pre:when>
			<!-- is attribute case -->
			<pre:otherwise>
				<attributeCase/>
			</pre:otherwise>
		</pre:choose>
	</pre:template>
</xsl:template>

which produces.

<xsl:template match="//tagname1[@fads]">
	<xsl:choose>
		<!-- is element case -->
		<xsl:when test="self::*">
			<elementCase/>
		</xsl:when>
		<!-- is attribute case -->
		<xsl:otherwise>
			<attributeCase/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

Edward

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread