xsl-list
[Top] [All Lists]

Re: [xsl] Can a single XPath statement duplicate the functionality of this verbose <xsl:choose> statement?

2011-10-24 08:09:27
 But I would love to get my hands on
more examples like your <drink type="beer"/> resolutions.

I have started writing a 'book', well it's more of a pamphlet, that
you never know one day might get finished.

I still do not understand, for instance, the emphasis in the literature in
distinguishing between the "root" and "the document node"; it seems not to
have any impact on writing code.

The document node contains the root element.  So for example:

[ document root]
<html>
  <head> ..</head>
  <body> ..</body>
</html>
[ /document root]

The <html> element is the "root element".  The "document node"
contains that root element, and has properties associated with it such
as the document uri.  The term "root node" is a little ambiguous as
it's the document-node() if it exists, or the root element if it
doesn't.

In general it won't affect your code much, but a common issue is when
you create variables and then change the sequence type:

<xsl:variable name="types">
  <type>A</type>
  <type>B</type>
  <type>C</type>
</xsl:variable>

Here the variable $types contains a document-node() (which is created
implicitly) that contains 3 <type> elements (the single root element
restriction doesn't apply to temporary trees, or the result tree).

It's equivalent to:

<xsl:variable name="types">
  <xsl:document>
    <type>A</type>
    <type>B</type>
    <type>C</type>
  </xsl:document>
</xsl:variable>

Those <type> elements are siblings, because they share a common parent
- the document-node().  You can access (say) the first <type> using
$types/type[1], because $type returns the document node, and /type[1]
returns its first <type> child.

If you change the sequence type of the variable to:

<xsl:variable name="types" as="element(type)+">
  <type>A</type>
  <type>B</type>
  <type>C</type>
</xsl:variable>

The variable $types now contains 3 parentless <type> elements.  They
are no longer siblings because they don't share a common parent, and
you access the first one using $types[1] because $types return the 3
elements.



-- 
Andrew Welch
http://andrewjwelch.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>