Subject: Re: [xsl] grouping like items into one From: Michael Müller-Hillebrand <mmh@xxxxxxxxxxxxx> Date: Fri, 23 Jan 2009 11:09:38 +0100 |
[Please: Do not create a new thread by answering to a previous post, since many mail readers will group the post according to threads based on internal IDs and not subject lines.]
I wrote a template for DD (or /DD) that handles the border grouping. If you remove your <xsl:template match="text"> it gives the desired output. [Created with Kernows XSLT playground feature.]
<xsl:template match="DD"> <xsl:copy> <xsl:for-each-group select="text" group-adjacent="if (self::text[@border='single']) then 1 else 0"> <xsl:choose> <xsl:when test="current-grouping-key() = 1"> <span class="border"> <xsl:apply-templates select="current-group()" mode="moreStyles"/> </span> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="current-group()" mode="moreStyles"/> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </xsl:copy> </xsl:template>
xmlns:xsl="http://www.w3.org/1999/XSL/TransformI know I have done this with xsl 1.0 before and could figure it out, but 1.0 is painful :) So I am trying to figure it out with 2.0 and am getting stuck. I am running into that "how do I know what to look up if I don't know how to spell it" jam. I looked at the xsl:for-each-group element, but I don't think that will work in this situation. Someone want to take a whack at it?
I want to group bordered text into one border <span>, but leave italic text ( and other styles ) in individual nodes.
_______Source XML__________________ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <DD> <text italic="false" border="">a </text> <text italic="false" border="single">b </text> <text italic="true" border="single">c </text> <text italic="true" border="">d </text> <text italic="false" border="">e </text> <text italic="false" border="single">f </text> <text italic="false" border="single">g </text> <text italic="false" border="">h </text> <text italic="true" border="single">i </text> <text italic="true" border="">j </text> </DD>
_____Current output (formated for readability)________________ a <span class="border">b </span> <span class="border"><i>c </i></span> <i>d </i> e <span class="border">f </span> <span class="border">g </span> h <span class="border"><i>i </i></span> <i>j </i>
____ Desired output (formated for readability) ______________ ____ Note how there is one <span....> around b <i>c </> and around "f g " ___ a <span class="border">b <i>c </i></span> <i>d </i> e <span class="border">f g </span> h <span class="border"></span> <i>i </i> <i>j </i>
_____________ current xsl _______________ <xsl:stylesheet version="2.0"
" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:saxon="http://saxon.sf.net/" exclude-result-prefixes="xs saxon">
<xsl:template match="/DD"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="text"> <xsl:choose> <xsl:when test="@border='single'"> <span class="border"><xsl:apply-templates select="." mode="moreStyles"/></span> </xsl:when> <xsl:otherwise><xsl:apply-templates select="." mode="moreStyles"/></xsl:otherwise> </xsl:choose> </xsl:template>
<xsl:template match="text" mode="moreStyles"> <xsl:choose> <xsl:when test="./@italic='true'"> <i><xsl:apply-templates/></i> </xsl:when> <xsl:otherwise><xsl:apply-templates/></xsl:otherwise> </xsl:choose> </xsl:template>
</xsl:stylesheet>
-- _______________________________________________________________ Michael M|ller-Hillebrand: Dokumentations-Technologie Adobe Certified Expert, FrameMaker Lvsungen und Training, FrameScript, XML/XSL, Unicode Blog: http://cap-studio.de/ - Tel. +49 (9131) 28747
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] grouping like items into one, Fred Christian | Thread | RE: [xsl] grouping like items into , Michael Kay |
Re: [xsl] for-each(-group) - flatte, Andrew Welch | Date | RE: [xsl] grouping like items into , Michael Kay |
Month |