This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Ridiculous XPath expression, can I reduce it?
- To: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] Ridiculous XPath expression, can I reduce it?
- From: Nick Vincent <Nick at Neoworks dot com>
- Date: Tue, 3 Apr 2001 13:59:48 +0100
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi again,
Sorry I didn't explain that properly, but I wanted to keep the post
relatively short. Let me explain more thoroughly...
Basically what I'm doing is writing a form handler that can handle nested
forms within a page, and in order to do that I have to find the <input.?>
elements which are under a given <input.form> (the context node), but are
not under an <input.form> beneath that, and also are not beneath an
<input.link> node, which implies a different behaviour. These items must
also not have a 'form.prefix' attribute as that means they've already been
dealt with.
Once I've processed an <input.form> element I mark it with a 'done'
attribute to stop it being processed again (trust me on that one).
e.g. (asterisks are selected nodes)
<doc>
<input.form done='true'> <== Context node
<input.form name='john'>
*<input.button name='pete'/>
<input.form name='steve'>
<input.button name='clive'/>
</input.form>
*<input.button name='dudley'/>
*<input.text name='foo' />
</input.form>
<input.button name='alan' size='big' color='red'/>
<input.button/>
</input.form>
</doc>
For reference the form of the query is:
.//input.button[count(ancestor::input.form[not(@done)])=1 and
not(@form.prefix) and not(ancestor::input.link)] |
.//input.text[count(ancestor::input.form[not(@done)])=1 and
not(@form.prefix) and not(ancestor::input.link)]
Hope this helps,
Nick
> -----Original Message-----
> From: David Carlisle [mailto:davidc@nag.co.uk]
> Sent: 03 April 2001 13:17
> To: xsl-list@lists.mulberrytech.com
> Subject: Re: [xsl] Ridiculous XPath expression, can I reduce it?
>
>
>
> ^W on emacs (or ^X on a windows-y editor would probably make it
> smaller...)
>
> > which basically finds all the elements that exist below any given
> > <input.form> tag but not below an <input.link> tag.
>
> does it?
>
> If I didn't look at the sample code you'd posted I'd code the
> requested
> selection as
>
> .//*[ancestor::input.form and not(ancestor::input.link)]
>
> The code you posted seemed to be doing something with @done
> and also checking there was exactly one ancestor.
>
> Also it restricted * to a fixed list of element names.
>
> You may change * in the above to
>
> *[self::input.hidden or self::input.text or ....]
> if you really need this restriction.
>
> David
>
>
> _____________________________________________________________________
> This message has been checked for all known viruses by Star
> Internet delivered
> through the MessageLabs Virus Control Centre. For further
> information visit
> http://www.star.net.uk/stats.asp
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list