In XSLT 1.0, the effects of starting a transformation at a node other than
the root are not defined, so products can do what they like.
In 2.0, "/" is defined to match the root node even if the transformation
started deep within the document.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Pete & Angie Taylor [mailto:pandatay(_at_)gotadsl(_dot_)co(_dot_)uk]
Sent: 25 May 2006 21:44
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Updating xml - difference between MSXML and Xalan
Dear List,
We have a working document that can get large (100kb + ) and
is frequently updated by being transformed and then
completely replaced by the transformation result - a sort of
xslt master file update.
I am trying to improve performance by only transforming the
nodes that need to change, avoiding the high cost of
repeatedly copying the 90% plus that does not change each time.
The basic idea is for my application code to identify one or
more templates that handle the changes (name startswith
"replace"), find all nodes that are matched by any of these
templates, transform each node, and replace each node with
the result of its transformation. (I.e. to do a number of
very small translations of particular nodes, rather than one
very large translation of the whole document.)
For example, if my working document looks like this -
<a>
<b>before</b>
</a>
and I have a stylesheet with an identity template and a
template like this -
<xsl:template name="replace1" match="/a/b">
<xsl:copy>after</xsl:copy>
</xsl:template>
then my application finds the template named "replace1",
finds the node that is matched by "/a/b" and transforms and
replaces just that node. The result is -
<a>
<b>after</b>
</a>
When I transform the non-root <b> node rather than the whole
document, MSXML matches it with the "replace1" template, and
I get the result I expect. I can demonstrate a huge saving
when repeatedly making small updates to a large document.
But when I try to transform the <b> node in Xalan
(transformer.transform(new
DomSource(node)) ) it fails to match my <b> node with the
path "/a/b". I can only get my <b> node to be matched by a
template with a match attribute of exactly "b".
My question is: if I transform a node other than the root
node of an xml document using xslt, should the node be
matched by a template which has a match starting from the
root? (Should my <b> node be matched by my "/a/b"
template?) Any idea why Xalan doesn't seem to do it? Is it
me? (It usually
is!)
Thanks in advance - and thanks for many many interesting
posts in the past.
Pete Taylor
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--