|
Subject: RE: [xsl] grouping like items into one From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Fri, 23 Jan 2009 10:13:11 -0000 |
<xsl:template match="DD">
<DD>
<xsl:for-each-group select="text" group-adjacent="@border">
<xsl:choose>
<xsl:when test="current-grouping-key()='single'">
<span class="border">
<xsl:apply-templates select="current-group()"/>
</
</
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</
</
</
</
</
<xsl:template match="text[@italic='true']">
<i><xsl:value-of select="."/></i>
</
<xsl:template match="text[@italic='false']">
<xsl:value-of select="."/>
</
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Fred Christian [mailto:fredc@xxxxxxxxxx]
> Sent: 23 January 2009 01:37
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] grouping like items into one
>
> I 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:xsl="http://www.w3.org/1999/XSL/Transform"
> 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>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] grouping like items into , Michael Müller-Hille | Thread | Re: [xsl] grouping like items into , Fred Christian |
| Re: [xsl] grouping like items into , Michael Müller-Hille | Date | [xsl] xsl:for-each-group and identi, Jesper Tverskov |
| Month |