This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: determining whether an XPATH points to an element or attribute
- From: Edward dot Middleton at nikonoa dot net
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Thu, 24 Jan 2002 11:48:57 +0900
- Subject: RE: [xsl] determining whether an XPATH points to an element or attribute
- Reply-to: xsl-list at lists dot mulberrytech dot com
> <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