Re: [xsl] Insert an new Element on a attribute value change / test for nonexistence of an attribute

Subject: Re: [xsl] Insert an new Element on a attribute value change / test for nonexistence of an attribute
From: "Stephan H. Wissel" <stephan@xxxxxxxxxx>
Date: Thu, 15 Jul 2004 02:11:54 +0800
Hi David,

thx a lot! Works like a charm. I missed out the () after not. Your code 
has one typo. Instead of:
generate-id(following-sibling*[@newchapter='true'][1] 
it shoud read
generate-id(following-sibling::*[@newchapter='true'][1]

... but spotting this was sporty <g>. What I would love to see is a 
training vizualization software, where you can click 2 nodes and it starts 
generating the xpath expressions and color the axis and all such stuff. Do 
you know one?

;-) stw

David Carlisle <davidc@xxxxxxxxx> wrote on 14/07/2004 23:12:58:

> 
> Firstly this is essentially a grouping problem so you could do worse
> than
> http://www.jenitennison.com/grouping
> 
> but to answer your questions:
> 
> > How to test for the non-existance of an 
> > attribute.
> 
> test="not(@foo)" or test="not(element/@foo)" if the attributes not on
> teh current element. this is not special syntax it is just part of teh
> general scheme of things, @foo is an Xpath which selects all attributes
> called foo, a node set used in a boolean test counts as false just if
> the node set is empty, which it will be in this case if there are no foo
> attributes.
> 
> >  And how to select a subset of the following siblings. 
> >  The rule: all following siblings until you find one with an existing 
> >  attribute newchapter='true'.
> 
> This is harder in Xpath1 (and Jeni's grouping pages will show how you
> can use keys to avoid answering it directly) but
> you can do this as follows: firstly identify the next such element
> <xsl:variable name="x" select=generate-id(following-
> sibling*[@newchapter='true'][1])"/>
> Then select all following siblings that have the property that _their_
> first following sibling is the same one:
> 
> select="following-sibling::*[generate-id(following-
> sibling*[@newchapter='true'][1])=$x]"
> 
> David
> 
> ________________________________________________________________________
> This e-mail has been scanned for all viruses by Star Internet. The
> service is powered by MessageLabs. For more information on a proactive
> anti-virus service working around the clock, around the globe, visit:
> http://www.star.net.uk
> ________________________________________________________________________

Current Thread