Re: [xsl] Re: Re: AW: AW: global variable and position() once more

Subject: Re: [xsl] Re: Re: AW: AW: global variable and position() once more
From: fe.sola@xxxxxxxxxxxxxx
Date: Tue, 2 Sep 2003 16:35:35 -0400
Hello again Dimitre:
The following code gives me the error:
"Error in XPath expression, function not in namespace" 
<xsl:variable name="vStructured" 
select="ext:node-set($vrtfStructured)"/> 
I tried supresisng the ext denoting the namespace, but again the error.
tia
Lizet


Mensaje citado por Dimitre Novatchev <dnovatchev@xxxxxxxxx>:
...
  
> The complete code now is:
> 
> <xsl:stylesheet version="1.0"
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>  xmlns:ext="http://exslt.org/common";
>   exclude-result-prefixes="ext">
> 
>  <xsl:output omit-xml-declaration="yes" indent="yes"/>
>  <xsl:strip-space elements="*"/>
> 
>  <xsl:key name="kSection"
>   match="node()[not(self::hr)]"
>   use="generate-id(preceding-sibling::hr[1])"/>
> 
>  <xsl:key name="kStart"
>   match="section[@name='Claims']/text()
>                 [preceding-sibling::*[1][self::br]]"
>   use="contains(., '.')
>      and
>        number(substring-before(., '.'))
>       =
>        number(substring-before(., '.'))"/>
> 
>   <xsl:key name="kTrail"
>   match="section[@name='Claims']/text()
>                 [preceding-sibling::*[1][self::br]]"
>    use="generate-id(
>             preceding-sibling::text()
>             [
>              contains(., '.')
>            and
>              number(substring-before(., '.'))
>             =
>              number(substring-before(., '.'))
>             ]
>             [1]
>                    )"/>
> 
>   <xsl:template match="/">
>      <xsl:variable name="vrtfStructured">
>       <xsl:for-each select="*/hr">
>         <section name="{normalize-space(following-sibling::node()[1])}">
>          <xsl:copy-of select="key('kSection', generate-id())"/>
>         </section>
>       </xsl:for-each>
>      </xsl:variable>
> 
>      <xsl:variable name="vStructured"
> select="ext:node-set($vrtfStructured)"/>
> 
>      <xsl:for-each select="$vStructured">
>       <xsl:for-each select="key('kStart', 'true')">
>        <Claim>
>         <xsl:copy-of select="normalize-space()"/>
>         <xsl:variable name="vLastNumbered" select="position() = last()"/>
>         <xsl:for-each select="key('kTrail', generate-id())">
>           <xsl:if test="$vLastNumbered or not(position() = last())">
>             <xsl:copy-of
>              select="concat(substring(.,1,1),
>                             normalize-space(substring(.,2))
>                             )"/>
>           </xsl:if>
>         </xsl:for-each>
>        </Claim>
>       </xsl:for-each>
>     </xsl:for-each>
>   </xsl:template>
> </xsl:stylesheet>
> 
> 
> When applied on your source.xml:
> 
> <html>
>   <hr/>   Claims
>   <br/>
>   <br/>   I claim:
>   <br/>
>   <br/>   1. blah blah
>   <br/>
>   <br/>   more blah blah
>   <br/>
>   <br/>   2. blah blah blah
>   <br/>
>   <br/>   more blah blah
>   <br/>
>   <br/>   3. blah blah
>   <br/>
>   <br/>   more blah blah
>   <br/>
>   <br/>   4. blah blah blah
>   <br/>
>   <br/>   more blah blah
>   <br/>
>   <hr/>   Description
>   <br/>   This is the introduction to the description
>   <br/>   1. blah blah
>   <br/>
>   <br/>   more blah blah
>   <br/>
>   <br/>   2. blah blah blah
> 
> </html>
> 
> the wanted result is produced:
> 
> <Claim>1. blah blah more blah blah</Claim>
> <Claim>2. blah blah blah more blah blah</Claim>
> <Claim>3. blah blah more blah blah</Claim>
> <Claim>4. blah blah blah more blah blah</Claim>
> 
> 
> =====
> Cheers,
> 
> Dimitre Novatchev.
> http://fxsl.sourceforge.net/ -- the home of FXSL
> 
> <fe.sola@xxxxxxxxxxxxxx> wrote in message
> news:1062521638.3f54cb269eb21@xxxxxxxxxxxxxxxxx
> > Hello Dimitre and all,
> > The algorithm works very well except for what I mentioned in the previous
> email and it
> > was definetely my fault. I have contiguous text nodes with the description
> that have the
> > same list structure, so the xhtml looks like this:
> >
> > <html>
> >   <hr/>   Claims
> >   <br/>
> >   <br/>   I claim:
> >   <br/>
> >   <br/>   1. blah blah
> >   <br/>
> >   <br/>   more blah blah
> >   <br/>
> >   <br/>   2. blah blah blah
> >   <br/>
> >   <br/>   more blah blah
> >   <br/>
> >   <br/>   3. blah blah
> >   <br/>
> >   <br/>   more blah blah
> >   <br/>
> >   <br/>   4. blah blah blah
> >   <br/>
> >   <hr/>   Description
> >   <br/>   This is the introduction to the description
> >   <br/>   1. blah blah
> >   <br/>
> >   <br/>   more blah blah
> >   <br/>
> >   <br/>   2. blah blah blah
> >
> > </html>
> >
> > So far what I have on the xslt is:
> > <xsl:key name="kStart"
> >                      match="text()[preceding-sibling::*[1][self::br]]"
> >                      use="contains(., '.')
> >                      and
> >                      number(substring-before(., '.'))
> >                      =
> >                      number(substring-before(., '.'))"/>
> >
> >     <xsl:key name="kTrail"
> >                   match="text()[preceding-sibling::*[1][self::br]]"
> >                   use="generate-id(
> >                             preceding-sibling::text()
> >                             [
> >                               contains(., '.')
> >                               and
> >                               number(substring-before(., '.'))
> >                               =
> >                               number(substring-before(., '.'))
> >                            ]
> >                            [1]
> >                    )"/>
> > <xsl:template match="/html/body">
> >   <xsl:element name="Claims">
> >                <xsl:apply-templates
> select="node()[preceding-sibling::text()[starts-with
> > (normalize-space(.), 'Claims')] and
> following::text()[starts-with(normalize-space
> > (.), 'Description')]] " mode="claims"/>
> >   </xsl:element>
> > </xsl:template>
> >
> > <xsl:template
> match="node()[preceding-sibling::text()[starts-with(normalize-space
> > (.), 'Claims')] and following::text()[starts-with(normalize-space(.),
> 'Description')]] "
> > mode="claims">
> >                    <xsl:for-each select="key('kStart', 'true')">
> >                            <Claim>
> >                               <xsl:copy-of select="normalize-space()"/>
> >                               <xsl:variable name="vLastNumbered"
> select="position() =
> > last()"/>
> >                            <xsl:for-each select="key('kTrail',
> generate-id())">
> >
> >                                <xsl:if test="$vLastNumbered or
> not(position() = last
> > ())">
> >
> >                                      <xsl:copy-of
> select="concat(substring(.,1,1),
> > normalize-space(substring(.,2)))"/>
> >
> >                                </xsl:if>
> >                             </xsl:for-each>
> >                           </Claim>
> >                  </xsl:for-each>
> > </xsl:template>
> >
> >
> > But in the xml output I'm getting the claims alraight except that in the
> last claim I
> > get the fisrt text node of the description included and then starts the
> description
> > list. I know it has to do with:
> > node()[preceding-sibling::text()[starts-with(normalize-space(.),
> 'Claims')] and
> > following::text()[starts-with(normalize-space(.), 'Description')]]
> > I thought this expression would select the text nodes between 'Claims' and
> 'Description'
> > only so I'm still puzzled why it selects nodes after the 'Description'
> text node...
> > Thanks a lot for looking at this,
> > Lizet
> >
> > Mensaje citado por Dimitre Novatchev <dnovatchev@xxxxxxxxx>:
> >
> >
> > >
> > > Here's the corrected code (the key definitions are omitted as they are
> the
> > > same:
> > >
> > > <xsl:stylesheet version="1.0"
> > >  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> > >
> > >  <xsl:output omit-xml-declaration="yes" indent="yes"/>
> > >  <xsl:strip-space elements="*"/>
> > >
> > >  <xsl:key name="kStart"
> > >   match="text()[preceding-sibling::*[1][self::br]]"
> > >   use="contains(., '.')
> > >      and
> > >        number(substring-before(., '.'))
> > >       =
> > >        number(substring-before(., '.'))"/>
> > >
> > >   <xsl:key name="kTrail"
> > >   match="text()[preceding-sibling::*[1][self::br]]"
> > >    use="generate-id(
> > >             preceding-sibling::text()
> > >             [
> > >              contains(., '.')
> > >            and
> > >              number(substring-before(., '.'))
> > >             =
> > >              number(substring-before(., '.'))
> > >             ]
> > >             [1]
> > >                    )"/>
> > >
> > >   <xsl:template match="/">
> > >     <xsl:for-each select="key('kStart', 'true')">
> > >      <Claim>
> > >       <xsl:copy-of select="normalize-space()"/>
> > >       <xsl:variable name="vLastNumbered" select="position() = last()"/>
> > >       <xsl:for-each select="key('kTrail', generate-id())">
> > >         <xsl:if test="$vLastNumbered or not(position() = last())">
> > >           <xsl:copy-of
> > >            select="concat(substring(.,1,1),
> > >                           normalize-space(substring(.,2))
> > >                           )"/>
> > >         </xsl:if>
> > >       </xsl:for-each>
> > >      </Claim>
> > >     </xsl:for-each>
> > >   </xsl:template>
> > > </xsl:stylesheet>
> > >
> > > I believe that two very good books on XSLT are the following:
> > >
> > >   "Beginning XSLT" by Jeni Tennison
> > >
> > >   "XSLT Programmer's Reference" by Michael Kay.
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > =====
> > > Cheers,
> > >
> > > Dimitre Novatchev.
> > > http://fxsl.sourceforge.net/ -- the home of FXSL
> > >
> > > __________________________________
> > > Do you Yahoo!?
> > > Yahoo! SiteBuilder - Free, easy-to-use web site design software
> > > http://sitebuilder.yahoo.com
> > >
> > >  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> > >
> >
> >
> >
> >
> > -------------------------------------------------
> > Este mensaje fue enviado usando el servicio de correo en web de Infomed
> > http://webmail.sld.cu
> >
> >  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> >
> >
> 
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 




-------------------------------------------------
Este mensaje fue enviado usando el servicio de correo en web de Infomed
http://webmail.sld.cu

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread