Subject: Re: [xsl] Re: AW: AW: global variable and position() once more From: fe.sola@xxxxxxxxxxxxxx Date: Tue, 2 Sep 2003 12:53:58 -0400 |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Re: AW: AW: global variab, Dimitre Novatchev | Thread | [xsl] Re: Re: AW: AW: global variab, Dimitre Novatchev |
RE: [xsl] XSLT 2 processing of W3C , Michael Kay | Date | [xsl] XSL design question, pcarey |
Month |