xsl-list
[Top] [All Lists]

Re: Re: AW: AW: global variable and position() once more

2003-09-02 10:35:58
From: fe(_dot_)sola(_at_)infomed(_dot_)sld(_dot_)cu
Date: Tue,  2 Sep 2003 11:59:18 -0400
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Re: AW: AW: global variable and position() once more

Hello Dimitre:
I tested the code and yes, it didn't copy the last element of the list but 
also had
another problem and that is definetely my fault, I omitted to mention there 
are other
lists
like that in the input document, cause the description and the references 
appear as text
nodes but numbered lists as well, so the algorithm takes part of the other 
lists as well.
I'm going to try this new one and let you know the real output.
Thanks a lot for your help, so far the tutorials and chapters about XPath I've 
read
haven't mentioned the xsl:key tag, except for the specification, of course.
I will take a look at Amazon and find about the books you mentioned.
Best regards,
Lizet

Mensaje citado por Dimitre Novatchev <dnovatchev(_at_)yahoo(_dot_)com>:

You guys are really masters of XPath...Let me read this slowly and try
to understand...
Do you have any book or tutorial with this tricky constructions??
Thanks a lot!
lizet

Actually there was a small omission in the code and this would not allow
the last trailers to be copied.

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



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