Subject: Accessing XSL context - Was: RE: Question From: Mike Dierken <mike@xxxxxxxxxxxxxxx> Date: Thu, 4 Feb 1999 15:21:08 -0800 |
Paul, I agree that accessing several context is important. The full approach I would like to suggest provides for a parameter to context() which traverses up the 'xsl action' tree. So, context(0) would be equivalent to '.' So, do we have a general agreement that this is a real problem? Currently, there are three approaches that seem to fit the requirements: (if there are more suggestions, please let us know & provide example XSL) (also, I am biased toward #3, so please add some pros & cons to these...) Mike D ============================== Problem: Accessing XSL context <CLASS> <METHOD name="foo">...</METHOD> <METHOD name="bar">...</METHOD> <METHOD name="baz">...</METHOD> <METHOD name="jaz">...</METHOD> <DESCRIPTION><METHODREF name="foo"/> is very fooey</DESCRIPTION> </CLASS> "foo" is not a globally unique id. I know that it will be unique in the CLASS however. What I need is to do something like this: <xsl:template match="METHODREF"> <xsl:value-of select="ancestor(CLASS)/METHOD[@name=***]"> </xsl:template> The problem is that at the point of the *** I've lost the context of the METHODREF and don't have a way to get its @name anymore. ============================== Solution 1: 'constant()' method PROS: Access multiple contexts. Uses existing concepts. CONS: Requires multiple, similar declarations to access different contexts. EXAMPLE: <xsl:template match="METHODREF"> <xsl:constant name="where-am-i" value="{@name}"/> <xsl:value-of select="ancestor(CLASS)/METHOD[@name=constant(where-am-i)]"/> </xsl:template> ============================== Solution 2: macros and 'arg()' method PROS: Access multiple contexts. Uses existing concepts. CONS: The 'arg()' method isn't currently supported in query strings. Requires multiple, similar declarations to access different contexts. EXAMPLE: <xsl:macro name='helper'> <xsl:macro-arg name='where-am-i'/> <xsl:value-of select="ancestor(CLASS)/METHOD[@name=arg(where-am-i)]"/> </xsl:macro-arg> </xsl:macro> <xsl:template match="METHODREF"> <xsl:invoke macro='helper'> <xsl:arg name="where-am-i" value="{@name}"/> </xsl:invoke> </xsl:template> ============================== Solution 3: 'context()' method PROS: Access multiple contexts. Doesn't require declarations to access different contexts. More declarative of what you want, rather than how to get it. CONS: Introduces new concept. EXAMPLE: <xsl:template match="METHODREF"> <xsl:value-of select="ancestor(CLASS)/METHOD[@name=context(1)/@name]"/> </xsl:template> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Fw: Namespaces does *not* formally , Oren Ben-Kiki | Thread | Re: Accessing XSL context - Was: RE, Paul Prescod |
Re: Venting, Chris Maden | Date | About Microsoft Patent, Didier PH Martin |
Month |