|
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 |