Subject: RE: [xsl] Xpath and Ranges From: "David White" <davidw@xxxxxxxxxxx> Date: Fri, 4 Aug 2006 08:12:20 -0500 |
Thanks for the quick feedback! <xsl:template match="for $T1 in (//title)[1], $T2 in (//title)[2] return ($T1, //*[. &-g-t;&-g-t; $T1 and . &-l-t;&-l-t; $T2])"> <xsl:element name="sect1"> <xsl:apply-templates/> </xsl:element> </xsl:template> Comes up as an invalid pattern still. ( the &-g-t-; are added for clarity ) Could it be my software? XMLSpy 2006? -----Original Message----- From: Joe Fawcett [mailto:joefawcett@xxxxxxxxxxx] Sent: Friday, August 04, 2006 8:04 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Xpath and Ranges You need to escape the << to &-l-t-; &-l-t-; (dashes added for clarity, remove in code). You might want to escape >> to &-g-t-; &-g-t-; as well. -- Joe ----- Original Message ----- From: "David White" <davidw@xxxxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Friday, August 04, 2006 1:56 PM Subject: RE: [xsl] Xpath and Ranges Hello, The below statement works fine when I run a XQUERY against my XML. It returns the nodes that I need. for $T1 in (//title)[1], $T2 in (//title)[2] return ($T1, //*[. >> $T1 and . << $T2], $T2) However, when I plug it into a XSLT template it complains about the >>,<< characters. I have tried different versions of them but none validate. <xsl:template match="for $T1 in (//title)[1], $T2 in (//title)[2] return ($T1, //*[. >> $T1 and . << $T2], $T2)"> <xsl:element name="sect1"> <xsl:apply-templates/> </xsl:element> </xsl:template> Any suggestions? Thanks! -----Original Message----- From: Michael Kay [mailto:mike@xxxxxxxxxxxx] Sent: Wednesday, August 02, 2006 12:20 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Xpath and Ranges > Is it possible to use Xpath to select a range of nodes. > > <chapter> > <title>X</title> > <para> > <para> > <title>Y</title> > </chapter> > > I would like an Xpath statement that would select //title[1] > THROUGH //title[2] and include all nodes between. Is this possible? > I'm assuming that <para> represents <para>....</para>, i.e. a complete element. If you know that the nodes are siblings, and you are positioned on their parent, then you can do (title[1] , *[. >> title[1] and . << title[2]] , title[2]) If they aren't siblings and you are positioned on the root, then you can do for $T1 in (//title)[1], $T2 in (//title)[2] return ($T1, //*[. >> $T1 and . << $T2], $T2) That's XPath 2.0; in 1.0 it's more tricky. Michael Kay http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Xpath and Ranges, Joe Fawcett | Thread | Re: [xsl] Xpath and Ranges, David Carlisle |
Re: [xsl] Xpath and Ranges, Joe Fawcett | Date | Re: [xsl] Xpath and Ranges, David Carlisle |
Month |