Subject: Re: [xsl] tokenize From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 12 Oct 2016 09:11:32 -0000 |
I can't see why you would expect anything different from what you are getting. When you do > <xsl:for-each select="tokenize(.,', ')"> > <xsl:if test=".!=''"> > <au><xsl:copy-of select="."/></au> > </xsl:if> > </xsl:for-each> you are clearly outputting one <au> element for each token in the input, so I can't see why you would expect multiple tokens to be concatenated in a single <au> element. I think that what you actually need to do here is positional grouping. If we simplified the input so it read <p> <r>Amanda</r> <r>Ganem</r> <r>, M.D.</r> <r><sup>1</sup</r> <r>, </r> <r>Elias P. Bonaros</r> etc... </p> Then your logic would be <xsl:template match="p"> <xsl:for-each-group select="r" group-ending-with="r[. = ', ']"> <au> <xsl:value-of select="current-group()/text()"/> </au> </xsl:for-each-group> </xsl:template> Perhaps you can work out how to adapt this to your more complex input. (It might even be worth writing your stylesheet in two phases: first get rid of the needless complexity in the input data, then do the "business logic" on the simplified XML). Michael Kay Saxonica > On 12 Oct 2016, at 09:55, Joga Singh Rawat jrawat@xxxxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Hi Experts, > > I am not getting the Expected Output by following inputs. Any idea? Thanks > in advance. > > Input > <w:p> > <w:pPr><w:pStyle w:val="Authors0"/></w:pPr> > <w:r><w:t>Amanda > </w:t></w:r><w:r><w:t>Ganem</w:t></w:r><w:r><w:t>,M.D.</w:t></w:r> > <w:r><w:rPr><w:vertAlign > w:val="superscript"/></w:rPr><w:t>1,B6,*</w:t></w:r> > <w:r><w:t>, </w:t></w:r> > <w:r><w:t>Elias P. Bonaros,M.D.</w:t></w:r> > <w:r><w:rPr><w:vertAlign w:val="superscript"/></w:rPr><w:t>2</w:t></w:r> > <w:r><w:t>, Bibiana D</w:t></w:r> > <w:r><w:t>. Stephen</w:t></w:r> > <w:r><w:rPr><w:vertAlign w:val="superscript"/></w:rPr><w:t>3</w:t></w:r> > <w:r><w:t>, </w:t></w:r> > <w:r><w:t>J.H. Calderon Jr</w:t></w:r> > <w:r><w:rPr><w:vertAlign w:val="superscript"/></w:rPr><w:t>2</w:t></w:r> > <w:r><w:t>, J.H. Calderon</w:t></w:r> > <w:r><w:rPr><w:vertAlign w:val="superscript"/></w:rPr><w:t>5,6</w:t></w:r> > <w:r><w:t xml:space="preserve">, </w:t></w:r> > <w:r><w:t>W. WYAT Hoback</w:t></w:r> > <w:r><w:rPr><w:vertAlign w:val="superscript"/></w:rPr><w:t>4,6</w:t></w:r> > </w:p> > > Xslt > <xsl:template match="w:p"> > <xsl:if test="w:pPr/w:pStyle/@w:val='Authors0'"> > <aug> > <xsl:apply-templates select="*" mode="make-tokens"/> > </aug> > </xsl:if> > </xsl:template> > <xsl:template match="*" mode="make-tokens"> > <xsl:for-each select="tokenize(.,', ')"> > <xsl:if test=".!=''"> > <au><xsl:copy-of select="."/></au> > </xsl:if> > </xsl:for-each> > </xsl:template> > <xsl:template match="w:r[w:rPr/w:vertAlign/@w:val='superscript']" > mode="make-tokens"> > </xsl:variable> > <sup><xsl:value-of select="."/></sup> > </xsl:template> > > Current output > <aug> > <au>Amanda </au> > <au>Ganem</au> > <au>,M.D.</au> > <sup>1,&x00B6;,*</sup> > <au>Elias P. Bonaros,M.D.</au> > <sup>2</sup> > <au>Bibiana D</au> > <au>. Stephen</au> > <sup>3</sup> > <au>J.H. Calderon Jr</au> > <sup>2</sup> > <au>J.H. Calderon</au> > <sup>5,6</sup> > <au>W. WYAT Hoback</au> > <sup>4,6</sup> > </aug> > > Expected output > <aug> > <au>Amanda Ganem,M.D. <sup>1,&x00B6;,*</sup></au> > <au>Elias P. Bonaros,M.D.<sup>2</sup></au> > <au>Bibiana D. Stephen<sup>3</sup></au> > <au>J.H. Calderon Jr<sup>2</sup></au> > <au>J.H. Calderon<sup>5,6</sup></au> > <au>W. WYAT Hoback<sup>4,6</sup></au> > </aug>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] tokenize, Martin Honnen martin | Thread | [xsl] [ANN] Balisage 2017 Location , Tommie Usdin btusdin |
Re: [xsl] tokenize, Martin Honnen martin | Date | Re: [xsl] Character encoding/repres, Bridger Dyson-Smith |
Month |