Subject: Re: [xsl] Conditional text using attributes -- saxon:evaluate? From: "Steve Muench" <Steve.Muench@xxxxxxxxxx> Date: Fri, 29 Dec 2000 09:19:56 -0800 |
| Your augmented identity transformation is just what I had in mind -- | conditional inclusion based only on attribute names/values. | | To further parameterize it, would it be possible to also specify an | attribute name as a parameter along with the value | | For example, it would be very nice to be able to do something like: | | saxon test.xml beth.xsl attribute='os' value='PC' This should do it: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:param name="attribute">os</xsl:param> <xsl:param name="value">Mac</xsl:param> <xsl:template match="node()|@*"> <xsl:choose> <!-- | If current node is an element having an attribute whose | local name (i.e. disregarding namespace prefix) matches | $attribute and whose value is not equals to $value, do nothing. +--> <xsl:when test="self::*[@*[local-name()=$attribute and . !=$value]]"/> <!-- | Otherwise, copy it and process it's attributes/child nodes +--> <xsl:otherwise> <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> This may be less well-performing that the previous one with a hard-coded attribute name, but is more generic... If I alter my source to use the 'role' attribute like this: <?xml version="1.0"?> <article> <articleinfo> <title role="PC">Starting the timer using Microsoft Windows</title> <title role="Mac">Starting the timer using MacOS</title> </articleinfo> <para> Press the <emphasis role="PC">Left</emphasis> mouse button to start the timer. You can use the <emphasis role="Mac">Finder</emphasis> <emphasis role="PC">Start Button</emphasis> to launch a new program. </para> </article> Then I can now do: $ saxon test3.xml cond2.xsl attribute=role value=PC <?xml version="1.0" encoding="utf-8"?> <article> <articleinfo> <title role="PC">Starting the timer using Microsoft Windows</title> </articleinfo> <para> Press the <emphasis role="PC">Left</emphasis> mouse button to start the timer. You can use the <emphasis role="PC">Start Button</emphasis> to launch a new program. </para> </article> ______________________________________________________________ Steve Muench, Lead XML Evangelist & Consulting Product Manager BC4J & XSQL Servlet Development Teams, Oracle Rep to XSL WG Author "Building Oracle XML Applications", O'Reilly http://www.oreilly.com/catalog/orxmlapp/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Conditional text using at, Michael Smith | Thread | RE: [xsl] Conditional text using at, Chris Bayes |
Re: [xsl] xsl:with-param issue., David Carlisle | Date | Re: [xsl] multiple XML tags -> sing, David Carlisle |
Month |