xsl-list
[Top] [All Lists]

Re: [xsl] Trying to understand root-less or document-node-less nodes

2007-09-17 05:44:05
On 9/17/07, Abel Braaksma <abel(_dot_)online(_at_)xs4all(_dot_)nl> wrote:
Andrew Welch wrote:
What you're describing is the same as typing the variable as="element()" eg:

<xsl:variable name="root" as="element()+">
  <test1 />
  <test2 />
</xsl:variable>

By adding as="element()+" the variable goes from a root with two child
elements that are siblings (eg to access <test1/> use $root/test1) to
a sequence of elements with no root and that aren't siblings (to
access <test1/> use $root[1])

Hi David, thanks for your response.

It was from me Abel... :)

Surely that adds to clarity (and
iirc, Michael Kay often tried to emphasize the use of the 'as' clause to
prevent the document node from being created).

It's important to realise what happens when you add as="element()+" to
a variable definition - I've been caught out by it before when typing
all of my variables.

If you really need a document node because you need to maintain the
sibling relationships and you want to use the as attribute then you
need to use xsl:document eg:

<xsl:variable name="root" as="document-node()">
  <xsl:document>
    <test1/>
    <test2/>
  </xsl:document>
</xsl:variable>

which is effectively the same as not using the as attribute:

<xsl:variable name="root">
    <test1/>
    <test2/>
</xsl:variable>

...so in this case I decided that the "as" attribute can be left off
(this is the exception to the rule of "always use the as attribute").

The start of the thread where DC explains it is here:

http://www.oxygenxml.com/archives/xsl-list/200607/msg00880.html


But root() never seems to
fail: in your example, that means that the result is a sequence of two
elements with each having a root equal to self::node()? And both, I
guess, not being siblings from one another?

Yes, that sounds right.

-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/

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