I have not tried fully your ideas but they look perfect
although since this application is purely Microsoft we
already know the order. We'll need to test and make sure it
works in both just in case things change as we would want our
XSLs independent of transformer.
I don't think it would even be safe to assume that one processor will give
you the same result consistently. Your code could easily stop working if you
make some apparently irrelevant change, like changing the names of your
variables.
You recommended:
<xsl:param name="stylemasterfile" select="/winelist/stylemasterfile"/>
Which we agree with by the way. We would have no problem with
this but cannot figure out why the server implementation of
Microsoft XSLT tries to resolve the full path of the XML file
in the document() command --
document($stylemasterfile)/styles. When we use the above
method to set the <param>. It tries to find "styles.xml" in
the default Web Server directory and not in a relative
directory to the XSL.
This structure we used (below) does not and the server looks
for "styles.xml" relative to the XSL:
<xsl:param name="stylemasterfile">
<xsl:value-of select="/winelist/stylemasterfile"/>
</xsl:param>
When you copy the nodes to a temporary tree, it changes the base URI to that
of the stylesheet, which will give different results for the document
function. (The two constructs are not in fact 100% equivalent, which is why
an optimizer cannot easily get rid of the inefficient copy operation. They
are 99% equivalent, which is why some of us keep repeating the message that
the direct select="" option is the one to use in preference in the 99% of
cases where the effect is the same.)
<xsl:param name="stylemasterfile"
select="string(/winelist/stylemasterfile)"/>
This works, the document() function in Microsoft's XSL
Transform to think it is relative and does not prepend with
the Web Server path.
Yes, that's a reasonable and portable way to ensure that document() resolves
against the base URI of the stylesheet rather than than of the source
document. If the first argument to document() is a string (rather than a
node) then it will resolve against the stylesheet base URI.
Regards,
Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay
--~------------------------------------------------------------------
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>
--~--