Re: [xsl] Detecting presence of attributes

Subject: Re: [xsl] Detecting presence of attributes
From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx>
Date: Mon, 5 Feb 2001 18:40:01 +0000
Hi Peter,

> <thesis faculty="arts" department="history" options="foo bar blort">
> where foo.sty, bar.sty, and blort.sty are among the allowed options
> (ie declared entities in the DTD) for translation to LaTeX's
> \usepackage{foo,bar,blort}. Just a safety check to make sure a
> student doesn't go haywire.

Well, inspired by Dimitre's insight about id(), here's a solution that
doesn't involve recursive templates, as long as you don't mind
repeating in the stylesheet the list of allowed options:

<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet [
<!ATTLIST thesis:opt id ID #REQUIRED>
<xsl:stylesheet version="1.0"

  <thesis:opt id="foo" />
  <thesis:opt id="bar" />

<xsl:template match="thesis">
   <xsl:text>Options: </xsl:text>
   <xsl:variable name="options" select="@options" />
   <!-- change the context to the stylesheet document -->
   <xsl:for-each select="document('')/*">
      <!-- get the id attributes of any options identified by ID -->
      <xsl:for-each select="id($options)/@id">
         <xsl:value-of select="." />
         <xsl:if test="position() != last()">, </xsl:if>


It has the advantage that you can deal with bad values (e.g. if
'blort' wasn't actually allowed) within the stylesheet - if that's an



Jeni Tennison

 XSL-List info and archive:

Current Thread