This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Concatenate element values based on another key element
- To: "'xsl-list at mulberrytech dot com'" <xsl-list at mulberrytech dot com>
- Subject: RE: Concatenate element values based on another key element
- From: "Eliot, Topher" <Christopher_Eliot at jdedwards dot com>
- Date: Thu, 12 Oct 2000 20:35:42 -0600
- Reply-To: xsl-list at mulberrytech dot com
Here's a partial solution. It doesn't iterate through the integer values,
but it does collect
all the text for each value pretty well. I gotta go home now, my wife is
wondering where the
heck I am.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes" />
<!-- Set up a key that finds recs by some_id value -->
<xsl:key name="idKey"
match="rec"
use="some_id" />
<xsl:template match="/test">
<!-- Unfortunately I haven't solved the iteration (recursion?)
problem here -->
<xsl:call-template name="doOneIdValue">
<xsl:with-param name="idValue" select="1" />
</xsl:call-template>
<xsl:call-template name="doOneIdValue">
<xsl:with-param name="idValue" select="2" />
</xsl:call-template>
<xsl:call-template name="doOneIdValue">
<xsl:with-param name="idValue" select="3" />
</xsl:call-template>
</xsl:template>
<xsl:template name="doOneIdValue">
<xsl:param name="idValue" />
<rec>
<some_id><xsl:value-of select="$idValue"/></some_id>
<some_text>
<xsl:apply-templates mode="string" select="key('idKey', $idValue)"
/>
</some_text>
</rec>
</xsl:template>
<xsl:template mode="string" match="rec">
<xsl:value-of select="some_text" />
</xsl:template>
</xsl:stylesheet>
> -----Original Message-----
> From: BC Huang [mailto:bc.huang@home.com]
> Sent: Thursday, October 12, 2000 11:52 AM
> To: XSL-List@mulberrytech.com
> Subject: Concatenate element values based on another key element
>
>
> I am trying to write a template to concatenate values from an
> element based
> on another key element. The source document looks like this:
>
>
> <test>
> <rec>
> <some_id>1</some_id>
> <some_text>text for id 1</some_id>
> </rec>
>
> <rec>
> <some_id>2</some_id>
> <some_text>first line of text for id 2</some_text>
> </rec>
>
> <rec>
> <some_id>2</some_id>
> <some_text>second line of text for id 2</some_text>
> </rec>
>
> <rec>
> <some_id>2</some_id>
> <some_text>nth line of text for id 2</some_text>
> </rec>
>
> <rec>
> <some_id>3</some_id>
> <some_text>text for id 3</some_text>
> </rec>
> </test>
>
> The number of <rec>s can vary and each ID can have as many
> lines (thus recs)
> of text. In terms of the id element, they are duplicates,
> but I need to
> concatenate the related the element (some_text) and produce
> one single rec
> in the output like this:
>
> <test>
> <rec>
> <some_id>1</some_id>
> <some_text>text for id 1</some_text>
> </rec>
>
> <rec>
> <some_id>2</some_id>
> <some_text>first line of text for id 2 second line of
> text for id 2 nth
> line of text for id 2</some_text>
> </rec>
>
> <rec>
> <some_id>3</some_id>
> <some_text>text for id 3</some_text>
> </rec>
> </test>
>
> Could anyone help me on this. Thank you very much in advance.
>
> Ben
>
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list