xsl-list
[Top] [All Lists]

[xsl] Evaluate XPath from String

2009-06-05 12:55:55
Hi there.

I'm wondering about processing strings as XPaths in XSLT2.  I know
about saxon:evaluate() but what I'm wondering is a way to do this in
XSLT2 _without_ extensions.  (A possible answer is "don't do it, way
too hard, just use the extensions".)

So if I was using saxon:evaluate() I might do something like:
====input===
<?xml version="1.0" encoding="UTF-8"?>
<foo>
    <paths>
        <path>/foo/blort/wibble[1]</path>
        <path>/foo/blort/wibble[2]</path>
         <path>//*[(_at_)xml:id='wibNum2']/splat/@att</path>
    </paths>
    <blort>
        <wibble>test text 1</wibble>
        <wibble>Another wibble </wibble>
        <wibble xml:id="wibNum2">This is <splat att="value1">a
test</splat></wibble>
    </blort>
    </foo>
====

and a script like:

====xsl===
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
      version="2.0" xmlns:saxon="http://saxon.sf.net/";
exclude-result-prefixes="#all">
<xsl:output indent="yes"/>
<xsl:template match="/foo">
    <foo>
        <xsl:for-each select="paths/path">
        <out><xsl:value-of select="saxon:evaluate(.)"/></out>
    </xsl:for-each>
        </foo>
</xsl:template>

</xsl:stylesheet>
====

I should get the output:

====output===
<?xml version="1.0" encoding="UTF-8"?>
<foo>
   <out>test text 1</out>
   <out>Another wibble </out>
   <out>value1</out>
</foo>
====

Hurrah, it works.  But I guess my question is how hard is it to create
fn:myEvaluate() in XSLT2 which does basically the same thing?

Thanks for any suggestions.

-James

--~------------------------------------------------------------------
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>