xsl-list
[Top] [All Lists]

RE: [xsl] Xpath and Ranges

2006-08-04 06:12:38
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(_at_)hotmail(_dot_)com] 
Sent: Friday, August 04, 2006 8:04 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_at_)kencook(_dot_)com>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
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(_at_)saxonica(_dot_)com]
Sent: Wednesday, August 02, 2006 12:20 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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/



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>