Jacobus Reyneke schrieb am 16.03.2010 um 23:52:43 (+0200):
I have an element called glossary. It contains a link to a different
part of the XML file. If I select the path from it, Saxon assumes that
I'm now working with a string value, but I'm not. How to I tell it not
to treat it as a string but to get the value of the node that the
'string' is pointing to?
This is called "dynamic evaluation". You need an eval function to do it.
RE: [xsl] Dynamic evaluation of XPath
http://www.biglist.com/lists/xsl-list/archives/200303/msg00517.html
Here's a sample I keep for my personal reference:
<xsl:stylesheet version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:saxon="http://saxon.sf.net/"
xmlns:Michael="urn:X-read-on-xsl-list"
exclude-result-prefixes="xs saxon Michael"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<Michael:Kay>
This is usually called "dynamic evaluation". For dynamic
evaluation of XPath expressions you can use the extension
function saxon:evaluate() (or saxon:expression() followed by
saxon:eval() if you want to reuse the compiled expression).
For dynamic evaluation of XQuery there is
saxon:compile-query() and saxon:query(). </Michael:Kay>
<xsl:template match="/*">
<xsl:copy>
<xsl:variable name="expr" as="xs:string">
for $x in 1 to 10 return $x
</xsl:variable>
<saxon-evaluate>
<xsl:copy-of select="saxon:evaluate( $expr )"/>
</saxon-evaluate>
<xsl:variable name="compiled" select="saxon:expression( $expr )"/>
<saxon-eval>
<xsl:copy-of select="saxon:eval( $compiled )"/>
</saxon-eval>
<saxon-eval>
<xsl:copy-of select="saxon:eval( $compiled )"/>
</saxon-eval>
<xsl:variable name="xpath" select="'//Michael:Kay'"/>
<saxon-eval><!-- feed this stylesheet as input -->
<xsl:copy-of select="saxon:evaluate( $xpath )"
copy-namespaces="no"/>
</saxon-eval>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Note that to run it, you need Saxon PE, EE or 9.1.
--
Michael Ludwig
--~------------------------------------------------------------------
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>
--~--