Re: [xsl] Cannot process a result tree fragment as a node-set under XSLT 1.0 - My alternative don´t function

Subject: Re: [xsl] Cannot process a result tree fragment as a node-set under XSLT 1.0 - My alternative don´t function
From: "ALEXCONTINI@xxxxxxxx" <ALEXCONTINI@xxxxxxxx>
Date: Thu, 17 Apr 2008 11:06:56 +0200 (MEST)
Hi,

<xsl:variable name="filter" select="exp[condition]"/>

I need that condition is:

      contains(<xsl:call-template name="str:to-upper"><xsl:with-param
name="text" select="TITULO"></xsl:with-param></xsl:call-template>, <xsl:
call-template name="str:to-upper"><xsl:with-param name="text"
select="$titulo"></xsl:with-param></xsl:call-template>)

and no:

    contains(TITULO,$titulo)

Some suggestion?

Thank you very much,
Alexander


PD: str:to-upper is a template that converts all lowercase letters to
uppercase and i use xml v1.0 version

<xsl:param name="titulo"></xsl:param>

<xsl:variable name="filter" select="exp[condition]"/>

<xsl:variable name="total" select="count($filter)"></xsl:variable>

 <xsl:for-each select="$filter">
          <p><xsl:value-of select="TITULO"/></p>
            ......
 </xsl:for-each>

....

<xsl:if test="$total > 10">
    <xsl:call-template name="pagination">
        <xsl:with-param name="curpage" select="$page"/>
        <xsl:with-param name="lastpage" select="ceiling($total div
$por_pagina)"/>
        <xsl:with-param name="pages" select="4"/>
        <xsl:with-param name="url" select="$url"></xsl:with-param>
    </xsl:call-template>
</xsl:if>




11:52 13/04/2008
---- Mensaje original -----
De: "Michael Kay" <mike@xxxxxxxxxxxx>
Para: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Enviado: sC!bado, 12 de abril de 2008 20:03
Asunto: RE: [xsl] Cannot process a result tree fragment as a node-set
under
XSLT 1.0 - My alternative donB4t function


It's not always possible to get by without using result tree fragments
but
it is possible in this case. And in general, if you can write

<xsl:variable name="x">
  <xsl:when test="condition1">
    <xsl:copy-of select="exp1"/>
  </xsl:when>
  <xsl:otherwise>
    <xsl:copy-of select="exp2"/>
  </xsl:otherwise>
</xsl:variable>

then you can probably replace it with

<xsl:variable name="x" select="exp1[condition1] | exp2[condition2]"/>

which avoids the cost of copying the nodes, and avoids the RTF
problem.

Of course an even better solution is to move to XSLT 2.0.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Alejandro [mailto:alexcontini@xxxxxxxx]
> Sent: 12 April 2008 18:50
> To: mike@xxxxxxxxxxxx
> Cc: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Cannot process a result tree fragment as a
> node-set under XSLT 1.0 - My alternative donB4t function
>
> Hi Michael,
>
> Thank you so much for the quick response.
>
> Michael >>However, it's not clear to me that you need to
> create an RTF in the first place. Why not define $filter as
>     <xsl:variable name="filter" select="//RecursoEx1[($option=1 and
> F_FIN=$date1 and contains(TITULO,'o')) or ($option=2 and
> F_FIN=$date2)]"/>
>
> I want to count the RecursoEx1 elements:
>     <p>Number: <xsl:value-of
> select="count(exsl:node-set($filter)/RecursoEx1)"/></p> CORRECT!
>
> I want to iterate over the RecursoEx1 elements:
>     <xsl:for-each select="exsl:node-set($filter)/RecursoEx1">
> CORRECT !
>
> I use xsl:copy-of and exsl:node-set because to error "Cannot
> process a result tree fragment as a node-set under XSLT 1.0"
> if i code :
>
> <xsl:variable name="filtro">
>         <xsl:choose>
>             <xsl:when test="$option=1">
>                 <xsl:copy-of
> select="//RecursoEx1[F_FIN=$date1]"/></xsl:when>
>             <xsl:otherwise>
>                 <xsl:copy-of
> select="//RecursoEx1[F_FIN=$date2]"/></xsl:otherwise>
>         </xsl:choose>
>     </xsl:variable>
>
>     <p>Number: <xsl:value-of select="$filter"/></p>
>
>     <xsl:for-each select="$filter">
>          <p><xsl:value-of select="TITULO"/></p>
>     </xsl:for-each>
>
>
> and i donB4t know if exits another posibility. Exists??
>
> The variable "option" is to received from one formulary, but
> there are more and then the "filter" will be dynamic.
>
> How can i do to construct the filter dynamic? For example, i
> receive one varible named "title" from the formulary with the
> value: "John Martin Car Monday" and i like to enumerate the
> RecursoEx1 elements that meet with this
> condition: TITLE=John or TITLE=Martin or TITLE=Car or TITLE=Monday.
>
> or title variable is Apple Pencil, ..... then the condition
> will be TITLE=Apple or TITLE=Pencil
>
> i donB4t know how may parameters i will receive in advance..
>
> Thanks again Michael,
>
> Alexander
>
>
> ----- Mensaje original -----
> De: "Michael Kay" <mike@xxxxxxxxxxxx>
> Para: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> Enviado: sC!bado, 12 de abril de 2008 14:03
> Asunto: RE: [xsl] Cannot process a result tree fragment as a
> node-set under XSLT 1.0 - My alternative donB4t function
>
>
> The node-set returned by the exsl:node-set() function will
> always contain a single (document or root) node. Perhaps you
> wanted its children:
> exsl:node-set()/*.
>
> However, it's not clear to me that you need to create an RTF
> in the first place. Why not define $filter as
>
> <xsl:variable name="filter"
>    select="//RecursoEx1[($option=1 and F_FIN=$date1 and
> contains(TITULO,'o'))
>                         or ($option=2 and F_FIN=$date2)]"/>
>
> Note also, that horrible bit of disable-output-escaping can
> be avoided by setting the doctype-system and doctype-public
> attributes on xsl:output.
>
> Michael Kay
> http://www.saxonica.com/
>
>
> > -----Original Message-----
> > From: Alejandro [mailto:alexcontini@xxxxxxxx]
> > Sent: 12 April 2008 13:05
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] Cannot process a result tree fragment as a node-set
> > under XSLT 1.0 - My alternative donB4t function
> >
> > Hello, i want to recover any records in function of one variable
> > (option in this case), and i donB4t know to do it. I want to
> print the
> > TITULO element the those records.
> > Can you help me, please?
> >
> > Cheers,
> > Alexander
> >
> >
> > ********************************* XML
> > *************************************
> >
> > <?xml version="1.0"?>
> >
> > <List>
> > <RecursoEx1>
> > <TITULO>Sara Baras</TITULO>
> > <F_INICIO>20080125000000</F_INICIO>
> > <F_FIN>20080211000000</F_FIN>
> > </RecursoEx1>
> >
> > <RecursoEx1>
> > <TITULO>Exposicion de pintura</TITULO>
> > <F_INICIO>20080201000000</F_INICIO>
> > <F_FIN>20080211000000</F_FIN>
> > </RecursoEx1>
> >
> > <RecursoEx1>
> > <TITULO>Inaguracion de ...</TITULO>
> > <F_INICIO>20080205000000</F_INICIO>
> > <F_FIN></F_FIN>
> > </RecursoEx1>
> >
> > <RecursoEx1>
> > <TITULO>Clausura de ..</TITULO>
> > <F_INICIO>20080101000000</F_INICIO>
> > <F_FIN>20080205000000</F_FIN>
> > </RecursoEx1>
> >
> > </List>
> >
> >
> > ********************** XSL **********************
> >
> > <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet
> > xmlns:i18n="http://apache.org/cocoon/i18n/2.0";
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> > xmlns:exsl="http://exslt.org/common";
> >     extension-element-prefixes="exsl" version="1.0">
> >
> > <xsl:output method="html" media-type="text/html;charset=iso-8859-
1"
> > indent="yes" encoding="ISO-8859-1" omit-xml-declaration="yes" />
> >
> > <xsl:variable name="date1" select="20080205000000"></xsl:variable>
> > <xsl:variable name="date2" select="20080211000000"></xsl:variable>
> > <xsl:variable name="option" select="1"></xsl:variable>
> >
> > <xsl:template match="/">
> >
> > <xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE
> > html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
> > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>]]></xsl:text>
> >
> > <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="es">
> >
> > <head>
> >  <title>Gabinete of Prensa</title>
> >     <meta http-equiv="Content-Type" content="text/html;
> > charset=iso-8859-1"
> > />
> > </head>
> >
> > <body>
> >
> >     <xsl:variable name="filter">
> >         <xsl:choose>
> >             <xsl:when test="$option=1">
> >                 <xsl:copy-of
> > select="//RecursoEx1[F_FIN=$date1 and
> > contains(TITULO,'o')]"/></xsl:when>
> >             <xsl:otherwise>
> >                 <xsl:copy-of
> > select="//RecursoEx1[F_FIN=$date2]"/></xsl:otherwise>
> >         </xsl:choose>
> >     </xsl:variable>
> >
> >
> >
> >
> >
> >  <p>Number: <xsl:value-of
> > select="count(exsl:node-set($filter))"/></p> <!-- DON'T FUNCTION --
>
> >
> >  <xsl:for-each select="exsl:node-set($filter)">
> >      <p><xsl:value-of
> > select="exsl:node-set($filter)/TITULO"/></p>      <!--
> > DON'T FUNCTION -->
> > </xsl:for-each>
> >
> > </body>
> > </html>
> > </xsl:template>
> >
> > </xsl:stylesheet>
> >
> >
> --
~------------------------------------------------------------------
> > 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@xxxxxxxxxxxxxxxxxxxxxx>



Ahora tambiC)n puedes acceder a tu correo Terra desde el mC3vil.
InfC3rmate pinchando aquC-.

Current Thread