Re: [xsl] Predicates question

Subject: Re: [xsl] Predicates question
From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx>
Date: Sat, 17 Dec 2011 19:11:58 +0100
An XPath expression may contain predicates that filter the set of
nodes returned by that XPath. Now, a filter for "book" is written as a
bracketed expression

    select="/bookstore/book[    ...predicate expression goes here...  ]"

Within the brackets, you are in a certain context: the one established
by the XPath expression up to the opening '['. And filtering
predicates should deal with book elements, referring to their position
within the store, or by investigating book elements such as title or
price.

If you want a combination of restrictions of book positions, you'll
have to write a more complex predicate (= logical expression). If you
are familiar with logical expressions in any programming language it
shouldn't come as a surprise that you can combine any term with
another using the logical operators "and" and "or".

   select="/bookstore/book[position() &gt; 1 and position() &lt; 3 ]"

Common sense would make you think that filters can be applied one
after the other as well. So you should try

   select="/bookstore/book[position() &gt; 1][position() &lt; 3 ]"

If the result surprises you, ask yourself: what passes through the
first filter?

Also, try

   select="/bookstore/book[position() &gt; 1][position() &lt; 3 ]"


A term such as
   /bookstore[position() > 1  ]
doesn*t make sense at all. Since /bookstore is the one and only root
element, there won't be another one at any position greater than one.

-W


On 17 December 2011 17:08, Roelof Wobben <rwobben@xxxxxxxxxxx> wrote:
>
> I found that already.
>
> Im now trying to solve this one :
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
>
> <xsl:template match="/">
>   <xsl:apply-templates select="/bookstore/book[position() < 3 and
/bookstore[position() > 1  ]" />
> </xsl:template>
>
> <xsl:template match="bookstore/book">
>   <h1><xsl:value-of select="title" /></h1>
>    <xsl:value-of select="price" />
> </xsl:template>
>
> </xsl:stylesheet>
>
>
>
>
> But I see now this message :
>
>
>
> Invalid XPath expression
> Unexpected end of statement
> select="/bookstore/book[position() < 5 and /bookstore[position() > 1  ]"
>
>
>
> So i try to find the books between the 1 and 5 position of the list.
>
>
>
> Roelof
>
>
>
>
>
>
>
>
>
>
>
>
>
> ---------------------------------------- > Date: Sat, 17 Dec 2011 09:24:14
-0500 > From: voldrani@xxxxxxxxx > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx >
Subject: Re: [xsl] Predicates question > > You have a couple of other syntax
errors, too. You forgot to close > your "". Try this: > >
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";> method="xml" version="1.0"
encoding="UTF-8" indent="yes"/> > select="/bookstore/book[position()<3]" /> >
> select="title"/>
>  > > On Sat, Dec 17, 2011 at 8:58 AM, Wolfgang Laun wrote: > > > > A basic
requirement for writing XML (and XSLT is XML) is to represent > > all '<' that
are part of the data (element or attribute or other) as > > < > > > > Another
characters in the same category is '&', which must be written > > as &. when
it is a data character (and not part of a character > > reference that begins
with '&'). > > > > (You may also find '>' written as >.) > > > > There's also
a construct known as CDATA section, which is a general > > "escape" mechanism
for element data. See /bookstore/book[2] for > > details ;-) > > > > -W > > >
> On 17 December 2011 14:39, Roelof Wobben wrote: > > > > > > > > > I have
this small xml file : > > > > > > > > > > > > > > > > > > > > > > > > Harry
Potter > > > 29.99 > > > > > > > > > > > > Learning XML > > > 39.95 > > > > >
> > > > > > > > > > > > > > > > And now I want to show only a few books. > > >
> > > According to this page : http://www.w3schools.com/xpath/xpath_syntax.asp
I can use this xslt : > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > >
>> > > > >
>
>> > > > > >
>
>
>> > > > > > > > > But if I try this on xmlspy I get this message : > > > > >
> > > > > > > Character '<' is grammatically unexpected > > > Reason: one of
the following is expected (see below) > > > '"' > > > '&' > > > '&#' > > >
'&#x' > > > [^<&"] > > > Details > > > XML production: Production 'AttValue'
not satisfied > > > > > > > > > > > > What part did I misunderstood. > > > > >
> > > > > > > Roelof > > > > > > > > >

Current Thread