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