On 19 September 2011 14:06, Murray McDonald
<m(_dot_)mcdonald(_at_)cogeco(_dot_)ca> wrote:
I am using XSLT 2 via AltovaXML.
I have a need to look up "key" terms in an external glossary document. The
external document has a default namespace at the root level. The code works
fine like this:
<xsl:param name="GLOSSARY" select="'./working_files/glossary.xml'"/>
<xsl:key name="definitions" match="glossentry" use="term/@key"
xpath-default-namespace="http://www.abcdef.com/hij"/>
<xsl:variable name="glossaryDocument" select="document($GLOSSARY)"/>
...
<xsl:variable name="definition">
<xsl:for-each select="$glossaryDocument">
<xsl:value-of select="key('definitions',
$normalizedText)/definition" xpath-default-namespace="
http://www.abcdef.com/hij"/>
</xsl:for-each>
</xsl:variable>
After testing I decided to replace the "hardcoded" namespace with a "global"
variable. I was surprised to find that this did not work.
<xsl:variable name="glossNS" select="'http://www.abcdef.com/hij'"
as="xs:anyURL"/>
<xsl:key name="definitions" match="glossentry" use="term/@key"
xpath-default-namespace="{$glossNS}"/>
...
<xsl:value-of select="key('definitions',
$normalizedText)/definition" xpath-default-namespace="{$glossNS}"/>
I've check the spec and I can't find anything to make me believe this
shouldn't work but it's entirely possible I may have missed some subtlety.
You can't declare namespaces using AVTs.... I would just declare the
namespace with a prefix once on your root element and then use that in
the key definition:
<xsl:stylesheet ... xmlns:foo="http://www.abcdef.com/hij">
<xsl:key name="definitions" match="foo:glossentry" use="term/@key"/>
--
Andrew Welch
http://andrewjwelch.com
--~------------------------------------------------------------------
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>
--~--