This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: Concatenate element values based on another key element


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]