xsl-list
[Top] [All Lists]

RE: [xsl] Can I predict the build order of nodes?

2010-02-15 02:59:17
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>