This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Complex XPath Help
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Thu, 25 Apr 2002 23:13:56 +0100
- Subject: RE: [xsl] Complex XPath Help
- Reply-to: xsl-list at lists dot mulberrytech dot com
You want:
//tab[@page=$param]/preceding::tab[1]/@page
//tab[@page=$param]/following::tab[1]/@page
Michael Kay
Software AG
home: Michael.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com
> -----Original Message-----
> From: owner-xsl-list@lists.mulberrytech.com
> [mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of Peet, Mike
> Sent: 25 April 2002 20:49
> To: 'xsl-list@lists.mulberrytech.com'
> Subject: [xsl] Complex XPath Help
>
>
> Okay, it's probably not *that* complicated, but I'm having
> some trouble with
> this one. I think I'm missing something fundamental. Sorry
> for the long
> message. For those of you that have the patience to look at
> this, your help
> is greatly appreciated.
>
> <xml>
> <tab-groups>
> <tab-group id="100" name="group1">
> <tabs>
> <tab desc="Page 1" page="page1.asp"/>
> <tab desc="Page 2" page="page2.asp"/>
> </tabs>
> </tab-group>
> <tab-group id="104" name="group2">
> <tabs>
> <tab desc="Page x" page="pagex.asp"/>
> <tab desc="Page y" page="pagey.asp"/>
> </tabs>
> <tab-group id="145" name="group3">
> <tabs>
> <tab desc="Page A" page="pageA.asp"/>
> <tab desc="Page B" page="pageB.asp"/>
> </tabs>
> </tab-group>
> <tab-group id="167" name="group3">
> <tabs>
> <tab desc="Page A" page="pageA.asp"/>
> <tab desc="Page B" page="pageB.asp"/>
> </tabs>
> </tab-group>
> </tab-group>
> </tab-groups>
> </xml>
>
> With the above XML document, if I pass a "page" into the XSLT as a
> parameter, and I want to know what the previous and next
> pages are, how
> would that be done? Note that the tab-groups may be nested.
>
> The desired behaviour is that the previous page would be
> simply the page
> attribute of the preceding <tab> element (in document order,
> regardless of
> group), and next would be the page attribute of the following
> <tab> element
> (in document order, regardless of group). The special cases
> of first and
> last pages can return nothing.
>
> One way that I can think of is an intermediate transform to
> get a document
> containing just the <tab> elements with no nesting, and using the
> preceding-sibling and following-sibling axes off the current
> tab, like this:
>
> <xml>
> <tabs>
> <tab group-id="100" desc="Page 1" page="page1.asp"/>
> <tab group-id="100" desc="Page 2" page="page2.asp"/>
> <tab group-id="104" desc="Page x" page="pagex.asp"/>
> <tab group-id="104" desc="Page y" page="pagey.asp"/>
> <tab group-id="145" desc="Page A" page="pageA.asp"/>
> <tab group-id="145" desc="Page B" page="pageB.asp"/>
> <tab group-id="167" desc="Page A" page="pageA.asp"/>
> <tab group-id="167" desc="Page B" page="pageB.asp"/>
> </tabs>
> </xml>
>
> But this seems to defeat the purpose of a having a nice structured XML
> document in the first place. I would like to be able to
> accomplish this
> without another transform, but I cannot seem to come up with
> the correct
> XPath.. :(
>
> Well, back to the XSL; thanks in advance!
>
> Michael Peet
> Software Engineer
> Choice One Communications
> 100 Chestnut Street, Suite 600
> Rochester, NY 14604
> mpeet@choiceonecom.com
> (585) 530-2773
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list