Hi Stefan,
On Fri, 19 Sep 2014 09:53:33 -0400
Stefan Seefeld <[email protected]> wrote:
> [...]
> Ideally I would like to be able to encode the query in an attribute,
> much as I would have preferred with xpointer, such as
>
> <listitem my:ref="*[@xml:id='foo']//d:listitem" />
>
> However, I can't manage to extract the above "ref" into a variable and
> concatenate that into a valid xpath expression inside a custom
> stylesheet:
>
> <xsl:template match="*[@my:ref]">
> <xsl:variable name="ref" select="@my:ref" />
> <xsl:variable name=content select="document('dict.xml')//$ref" />
> ...
> </xsl:template>
>
> It seems I'm misunderstanding something, as no matter how I spell the
> above, I get XPath errors from xsltproc.
Yes, as you try to dynamically evaluate a string as an XPath
expression. This is not possible with standard XSLT 1.0 and 2.0.
However, you could look into the dyn:evaluate() extension functions from
the EXSLT initiative:
http://exslt.org/dyn/functions/evaluate/index.html
You may try this, although I haven't tested it:
<xsl:template match="*[@my:ref]" xmlns:dyn="http://exslt.org/dynamic">
<xsl:variable name="ref" select="dyn:evaluate(@my:ref)" />
<xsl:variable name=content select="document('dict.xml')//$ref" />
...
</xsl:template>
Unfortunately, very few XSLT 1.0 processors implement dyn:evaluate().
It works in xsltproc, but it's unlikely it will work for Saxon.
> [...]
--
Gruß/Regards,
Thomas Schraitle
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]