xsl-list
[Top] [All Lists]

Re: [xsl] xpath query

2008-01-20 13:02:28
That helps alot.
Thank you

Sean

On Jan 20, 2008 11:05 AM, Colin Paul Adams 
<colin(_at_)colina(_dot_)demon(_dot_)co(_dot_)uk> wrote:
"Sean" == Sean Tiley <sean(_dot_)tiley(_at_)gmail(_dot_)com> writes:

   Sean> I guess fundamentally I do not understand how the processor
   Sean> applies the stylesheet templates to the xml document.

   Sean> Say I have the followng XML

   Sean> <root> <file name="test.java"> <error line="4"
   Sean> message="Message1" severity="2"/> <error line="67"
   Sean> message="Message2" severity="4"/> </file> <file
   Sean> name="code.java"> <error line="2" message="Message1"
   Sean> severity="2"/> <error line="54" message="Message2"
   Sean> severity="4"/> <error line="122" message="Message1"
   Sean> severity="2"/> </file> </root>

   Sean> Then as the processor processes the tree for this xml file,
   Sean> it finds the <root> element, then looks for a template that
   Sean> matches it.  It would find the identity template and invoke
   Sean> this template.  At this point, what does it put out to the
   Sean> result tree if anything?


A recap of what the identity template looks like. here is one form.

 <xsl:template match="@* | node()">
      <xsl:copy>
          <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
  </xsl:template>

If this is the template that proves to be the best match for your
element named root, then the processor will perform an xsl:copy of
that element.

From the XSLT 2.0 recommendation:

"The xsl:copy  instruction provides a way of copying the context
item. If the context item is a node, evaluating the xsl:copy
instruction constructs a copy of the context node, and the result of
the xsl:copy instruction is this newly constructed node. By default,
the namespace nodes of the context node are automatically copied as
well, but the attributes and children of the node are not
automatically copied."

So the processor will notionally now create an empty
<root>

</root>

 element in the result tree.
It then looks at the body of the xsl:copy instruction, to see what
else it has to do.

In this case, it is instructed to apply templates that match all the
elements attributes and child nodes.

In this case there are no attributes, but we do have some element
children (there may also be white-space text nodes, depending on
whether or not they have been stripped - let's assume none for the
moment).

The first element child it finds is the element:

<file name="test.java">

So it will then try to find a template that matches this node. If you
don't have any more specific templates to match this, then the
identity template will match it.

So it will copy it (execute the xsl:copy instruction in the
template).
Now the result tree looks like:

<root>
 <find>
 </find>
</root>

At which point it will try to execute the body of the xsl:copy
again. This time it finds and attribute node (name="test.java"), so it
will try to match that. Again, if you have no more specific template
than the identity template, the identity template will match. So the
processor will execute the xsl:copy instruction in the template, and
the result tree will now look like this:

<root>
 <find name="test.java">
 </find>
</root>

At which point it will try to execute the body of the xsl:copy
again. This time it finds no attributes or child nodes (an attribute
node has no children or attribtes), so it finishes that invocation of
the identity template, and resumes on the previous one where it left
off (matching the attribute name in the find element). It will
discover that find has no more attributes or child nodes, so it will
finish exceuting that invocation of the identity template too, and
resumes on the previous one where it left off (matching the find child
of the root element). It will look for further children of the root
element, and will find the first error element, so it will attempt to match
that.

Again, if you have no more specific template
than the identity template, the identity template will match. Etc. etc.
--
Colin Adams
Preston Lancashire


--~------------------------------------------------------------------
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>
--~--





-- 
Sean Tiley
sean(_dot_)tiley(_at_)gmail(_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>
--~--

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