Subject: Re: [xsl] Weired Result of XSLT From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Tue, 22 May 2007 09:43:54 +0100 |
Lot of thanks for your nice clue !!! I have written <xsl:strip-space elements="*"/> and it is working fine.
That's fine if you XML is data-centric, but if you have mixed content nodes (document-centric) then you may be stripping significant whitespace.
An alternative approach is to only select the nodes you want to process, eg replace:
<xsl:template match="contrib-group"> <contributors> <xsl:apply-templates/> </contributors> </xsl:template>
<xsl:template match="contrib-group"> <contributors> <xsl:apply-templates select="contrib"/> </contributors> </xsl:template>
Another alternatively is to replace position() with count(preceding-sibling::contrib) which will only count <contrib> elements, ignoring the whitespace presentational nodes between each element.
Another alternative is to control the flow differently - apply-templates to the first <contrib> element and output markup specific to the first, then apply-templates to the rest. This is achieved easily with a mode, eg:
<xsl:template match="contrib-group"> <contributors> <xsl:apply-templates select="contrib[1]" mode="first"/> </contributors> </xsl:template>
<xsl:template match="contrib" mode="first"> <person_name sequence="first" contributor_role="author"> <xsl:apply-templates select="name"/> </person_name>
<xsl:apply-templates select="following-sibling::contrib"/> </xsl:template>
<xsl:template match="contrib"> <person_name sequence="additional" contributor_role="author"> <xsl:apply-templates select="name"/> </person_name> </xsl:template>
However as both variations are identical other than the @sequence then I'd just use an AVT, eg.
cheers andrew
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Weired Result of XSLT, J. S. Rawat | Thread | Re: [xsl] Weired Result of XSLT, J. S. Rawat |
Re: [xsl] Weired Result of XSLT, J. S. Rawat | Date | Re: [xsl] Weired Result of XSLT, J. S. Rawat |
Month |