xsl-list
[Top] [All Lists]

Re: Keys off of variable xml source

2005-03-31 16:27:53
Karl,

At 06:17 PM 3/31/2005, you wrote:
Is it legal to create a key off of an xml source stored as a variable?
So the key decleration might look like:

<xsl:key name="myKey" match="$external_xml_source//data" use="some_element"/>

This isn't legal, but not for the reason you think. In XSLT 1.0, a match pattern can't contain a variable reference.

If not, is there a workaround?

None is needed, really. If you declare the key normally

<xsl:key name="myKey" match="data" use="some_element"/>

and then be sure that when you call it, the context is inside $external_xml_source, you'll be fine:

<xsl:variable name="var" select="[anything you need to capture context]"/>
<xsl:for-each select="$external_xml_source">
  ... inside here the key will retrieve nodes from $external_xml_source,
      and $var still refers to whatever you need from outside it ...
</xsl:for-each>

Your XSLT processor has enough information here to do the right thing -- and keys are specified to work this way.

This is a FAQ.

Cheers,
Wendell


======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>