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" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:thesis="http://www.silmaril.ie/thesis" exclude-result-prefixes="thesis"> <thesis:opts> <thesis:opt id="foo" /> <thesis:opt id="bar" /> </thesis:opts> <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> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet> 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 advantage. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] position() oddity?, Mike Brown | Thread | Re: [xsl] Detecting presence of att, Peter Flynn |
Re: [xsl] different first page usin, Steve Switzer | Date | [xsl] problem with iso-8859-1 and m, Paul Terray |
Month |