RE: [xsl] node functions

Subject: RE: [xsl] node functions
From: Sarkup Sarkup <sarkups@xxxxxxxxx>
Date: Tue, 5 Aug 2008 08:47:39 -0700 (PDT)
> From: Michael Kay <mike@xxxxxxxxxxxx>
> Subject: RE: [xsl] node functions
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Date: Tuesday, August 5, 2008, 3:20 PM
> 
> Your source document doesn't have any attributes on pub
> elements: but it
> does have an element called level1 which is the parent of
> the pub element.
> Are you confused, or are you just trying to confuse the
> rest of us?

element <pub> can occur anywhere after <info> in the xml. Here is the example with the attribute level to pub. 
--------------------------------------------------
<test2>
<info>
 <requirement>
 <level1>
 <para></para>
<pub level="1"></pub>
 </level1>
 </requirement>
 </info>
 </test2>

--------------------------------------------------


> > I tried:
 
> > This is obv wrong because the processor complains
> about it.
> 
> 1. not() is a function call, therefore it requires round
> brackets ()
> 
> 2. a filter predicate is always written in square brackets.
> 
> 3. both kinds of brackets have to match up!
> 
> So that corrects the grammar to:
> 
> //info[not(self::pub[@level='1'])]

That was a typo. Sorry about that. 

> 4. An info element will never be a pub element, so you
> don't want the self::
> axis here, you want some other axis. In your example pub is
> nested several
> layers below info - but that pub element doesn't have a
> level attribute, so
> perhaps your source document isn't useful as a guide.

Please see the new example above. 

> 5. If the select attribute of apply-templates doesn't
> select anything, then
> it does nothing, so you don't need to test it first in
> an xsl:if or
> xsl:choose.
> 
> 6. You might be better off applying templates to all the
> elements, and
> having different template rules to process those with
> level="1" and those
> with a different level.

Thank you. I will try that.


--- On Tue, 8/5/08, Michael Kay <mike@xxxxxxxxxxxx> wrote:

> From: Michael Kay <mike@xxxxxxxxxxxx>
> Subject: RE: [xsl] node functions
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Date: Tuesday, August 5, 2008, 3:20 PM
> > file2.xml
> > <test2>
> > <info>
> > <requirement>
> > <level1>
> > <para></para>
> > <pub></pub>
> > </level1>
> > </requirement>
> > </info>
> > </test2>
> > 
> > 
> > So, info and pub are two common elements between there
> two 
> > xml files. So there is a common style sheet just for
> pub 
> > called pub.xsl. pub has an attribute level which can
> be set to 1~4.
> > But in one commong style sheet, I want to apply
> templates for 
> > all //info elements and not include //pub elements
> which have 
> > @level='1'
> 
> Your source document doesn't have any attributes on pub
> elements: but it
> does have an element called level1 which is the parent of
> the pub element.
> Are you confused, or are you just trying to confuse the
> rest of us?
> > 
> > I tried:
> > 
> > <xsl:choose>
> > <xsl:when
> test="//info(not[self::pub[@level='1']">
> > 
> > <xsl:apply-templates
> select="//info(not[self::pub[@level='1']">
> > </xsl:when>
> > </xsl:choose>
> > 
> > This is obv wrong because the processor complains
> about it.
> 
> 1. not() is a function call, therefore it requires round
> brackets ()
> 
> 2. a filter predicate is always written in square brackets.
> 
> 3. both kinds of brackets have to match up!
> 
> So that corrects the grammar to:
> 
> //info[not(self::pub[@level='1'])]
> 
> 4. An info element will never be a pub element, so you
> don't want the self::
> axis here, you want some other axis. In your example pub is
> nested several
> layers below info - but that pub element doesn't have a
> level attribute, so
> perhaps your source document isn't useful as a guide.
> 
> 5. If the select attribute of apply-templates doesn't
> select anything, then
> it does nothing, so you don't need to test it first in
> an xsl:if or
> xsl:choose.
> 
> 6. You might be better off applying templates to all the
> elements, and
> having different template rules to process those with
> level="1" and those
> with a different level.
> 
> Michael Kay
> http://www.saxonica.com/

Current Thread